From ef798ed661506447aabfffc32317d51a8b37101a Mon Sep 17 00:00:00 2001 From: Kristian Sloth Lauszus Date: Tue, 5 Feb 2013 20:02:12 +0100 Subject: [PATCH] Update Doxygen --- Doxyfile | 12 +- _b_t_d_8cpp.html | 8 +- _b_t_d_8cpp_source.html | 1282 ++++++++++++ _b_t_d_8h.html | 180 +- _b_t_d_8h_source.html | 253 ++- ..._d_2_u_s_b_h_i_d__desc_2pgmstrings_8h.html | 10 +- ...s_b_h_i_d__desc_2pgmstrings_8h_source.html | 2 +- _p_s3_b_t_8cpp.html | 10 +- _p_s3_b_t_8cpp_source.html | 756 +++++++ _p_s3_b_t_8h.html | 60 +- _p_s3_b_t_8h_source.html | 164 +- _p_s3_enums_8h.html | 47 +- _p_s3_enums_8h_source.html | 263 ++- _p_s3_u_s_b_8cpp.html | 10 +- _p_s3_u_s_b_8cpp_source.html | 650 ++++++ _p_s3_u_s_b_8h.html | 30 +- _p_s3_u_s_b_8h_source.html | 140 +- _r_e_a_d_m_e_8md.html | 4 +- _r_e_a_d_m_e_8md_source.html | 241 +++ _s_p_p_8cpp.html | 12 +- _s_p_p_8cpp_source.html | 1023 ++++++++++ _s_p_p_8h.html | 86 +- _s_p_p_8h_source.html | 201 +- _u_s_b__desc_2pgmstrings_8h.html | 10 +- _u_s_b__desc_2pgmstrings_8h_source.html | 2 +- _usb_8cpp.html | 6 +- _usb_8cpp_source.html | 741 +++++++ _usb_8h.html | 118 +- _usb_8h__dep__incl.map | 40 +- _usb_8h__dep__incl.md5 | 2 +- _usb_8h__dep__incl.png | Bin 110924 -> 105744 bytes _usb_8h_source.html | 446 ++-- _wii_8cpp.html | 18 +- _wii_8cpp_source.html | 1257 ++++++++++++ _wii_8h.html | 94 +- _wii_8h_source.html | 463 ++--- _wii_camera_readme_8md.html | 4 +- ...html => _wii_camera_readme_8md_source.html | 58 +- _x_b_o_x_r_e_c_v_8cpp.html | 10 +- _x_b_o_x_r_e_c_v_8cpp_source.html | 639 ++++++ _x_b_o_x_r_e_c_v_8h.html | 56 +- _x_b_o_x_r_e_c_v_8h_source.html | 143 +- _x_b_o_x_u_s_b_8cpp__incl.map | 12 - _x_b_o_x_u_s_b_8cpp__incl.md5 | 1 - _x_b_o_x_u_s_b_8cpp__incl.png | Bin 54707 -> 0 bytes _x_b_o_x_u_s_b_8h.html | 666 ------ _x_b_o_x_u_s_b_8h__dep__incl.map | 3 - _x_b_o_x_u_s_b_8h__dep__incl.md5 | 1 - _x_b_o_x_u_s_b_8h__dep__incl.png | Bin 5596 -> 0 bytes _x_b_o_x_u_s_b_8h__incl.map | 11 - _x_b_o_x_u_s_b_8h__incl.md5 | 1 - _x_b_o_x_u_s_b_8h__incl.png | Bin 52815 -> 0 bytes _x_b_o_x_u_s_b_8h_source.html | 251 --- acm_2acm__terminal_2pgmstrings_8h.html | 10 +- acm_2acm__terminal_2pgmstrings_8h_source.html | 2 +- address_8h.html | 24 +- address_8h__dep__incl.map | 42 +- address_8h__dep__incl.md5 | 2 +- address_8h__dep__incl.png | Bin 115188 -> 110010 bytes address_8h_source.html | 2 +- adk_8cpp.html | 6 +- adk_8cpp_source.html | 454 +++++ adk_8h.html | 34 +- adk_8h_source.html | 2 +- annotated.html | 5 +- avrpins_8h.html | 8 +- avrpins_8h__dep__incl.map | 84 +- avrpins_8h__dep__incl.md5 | 2 +- avrpins_8h__dep__incl.png | Bin 241456 -> 233046 bytes avrpins_8h_source.html | 1255 ++++++------ cdcacm_8cpp.html | 6 +- cdcacm_8cpp_source.html | 458 +++++ cdcacm_8h.html | 106 +- cdcacm_8h_source.html | 2 +- cdcftdi_8cpp.html | 6 +- cdcftdi_8cpp_source.html | 447 ++++ cdcftdi_8h.html | 88 +- cdcftdi_8h_source.html | 2 +- cdcprolific_8cpp.html | 6 +- cdcprolific_8cpp_source.html | 342 ++++ cdcprolific_8h.html | 124 +- cdcprolific_8h_source.html | 2 +- class_a_c_m-members.html | 2 +- class_a_c_m.html | 73 +- class_a_d_k-members.html | 2 +- class_a_d_k.html | 45 +- class_address_pool-members.html | 2 +- class_address_pool.html | 7 +- class_address_pool_impl-members.html | 2 +- class_address_pool_impl.html | 20 +- class_b_t_d-members.html | 112 +- class_b_t_d.html | 404 +++- class_bluetooth_service-members.html | 2 +- class_bluetooth_service.html | 26 +- class_bulk_only-members.html | 2 +- class_bulk_only.html | 81 +- class_byte_skipper-members.html | 2 +- class_byte_skipper.html | 13 +- class_c_d_c_async_oper-members.html | 2 +- class_c_d_c_async_oper.html | 7 +- class_config_desc_parser-members.html | 2 +- class_config_desc_parser.html | 14 +- class_f_t_d_i-members.html | 2 +- class_f_t_d_i.html | 33 +- class_f_t_d_i_async_oper-members.html | 2 +- class_f_t_d_i_async_oper.html | 7 +- class_h_i_d-members.html | 2 +- class_h_i_d.html | 45 +- class_h_i_d_boot-members.html | 2 +- class_h_i_d_boot.html | 24 +- class_h_i_d_report_parser-members.html | 2 +- class_h_i_d_report_parser.html | 7 +- class_h_i_d_universal-members.html | 2 +- class_h_i_d_universal.html | 29 +- class_hex_dumper-members.html | 2 +- class_hex_dumper.html | 20 +- class_joystick_events-members.html | 2 +- class_joystick_events.html | 19 +- class_joystick_report_parser-members.html | 2 +- class_joystick_report_parser.html | 15 +- class_keyboard_report_parser-members.html | 2 +- class_keyboard_report_parser.html | 29 +- class_m_a_x3421e-members.html | 2 +- class_m_a_x3421e.html | 36 +- class_max___l_c_d-members.html | 2 +- class_max___l_c_d.html | 51 +- class_mouse_report_parser-members.html | 2 +- class_mouse_report_parser.html | 29 +- class_multi_byte_value_parser-members.html | 2 +- class_multi_byte_value_parser.html | 17 +- class_p_l2303-members.html | 2 +- class_p_l2303.html | 13 +- class_p_s3_b_t-members.html | 2 +- class_p_s3_b_t.html | 193 +- class_p_s3_u_s_b-members.html | 2 +- class_p_s3_u_s_b.html | 225 +- class_p_t_p_list_parser-members.html | 2 +- class_p_t_p_list_parser.html | 17 +- class_report_desc_parser-members.html | 2 +- class_report_desc_parser.html | 7 +- class_report_desc_parser2-members.html | 2 +- class_report_desc_parser2.html | 13 +- class_report_desc_parser_base-members.html | 2 +- class_report_desc_parser_base.html | 183 +- class_s_p_p-members.html | 20 +- class_s_p_p.html | 275 ++- class_s_pi-members.html | 2 +- class_s_pi.html | 12 +- class_t_com-members.html | 2 +- class_t_com.html | 20 +- class_t_pin-members.html | 2 +- class_t_pin.html | 34 +- class_tp___tc-members.html | 2 +- class_tp___tc.html | 16 +- class_u_s_b-members.html | 2 +- class_u_s_b.html | 57 +- class_u_s_b_device_config-members.html | 2 +- class_u_s_b_device_config.html | 17 +- class_u_s_b_device_config__inherit__graph.map | 1 - class_u_s_b_device_config__inherit__graph.md5 | 2 +- class_u_s_b_device_config__inherit__graph.png | Bin 22002 -> 19438 bytes class_u_s_b_hub-members.html | 2 +- class_u_s_b_hub.html | 35 +- class_u_s_b_read_parser-members.html | 2 +- class_u_s_b_read_parser.html | 7 +- class_universal_report_parser-members.html | 2 +- class_universal_report_parser.html | 11 +- class_usb_config_xtracter-members.html | 2 +- class_usb_config_xtracter.html | 9 +- class_w_i_i-members.html | 94 +- class_w_i_i.html | 687 ++++++- class_x_b_o_x_r_e_c_v-members.html | 2 +- class_x_b_o_x_r_e_c_v.html | 200 +- class_x_b_o_x_u_s_b-members.html | 122 -- class_x_b_o_x_u_s_b.html | 610 ------ class_x_b_o_x_u_s_b__coll__graph.map | 6 - class_x_b_o_x_u_s_b__coll__graph.md5 | 1 - class_x_b_o_x_u_s_b__coll__graph.png | Bin 6891 -> 0 bytes class_x_b_o_x_u_s_b__inherit__graph.map | 3 - class_x_b_o_x_u_s_b__inherit__graph.md5 | 1 - class_x_b_o_x_u_s_b__inherit__graph.png | Bin 2394 -> 0 bytes classes.html | 4 +- confdescparser_8h.html | 10 +- confdescparser_8h_source.html | 2 +- controller_enums_8h.html | 176 +- controller_enums_8h_source.html | 114 +- dir_1d947de3e20174a85c26f6da0b898a57.html | 2 +- dir_837070935000b02fcefc97f573ee3717.html | 2 +- dir_8d22a5dfb299d0b3a2bdc551c5cdbd10.html | 48 +- dir_8dbb1e1f0af541b88bec25c41dd874b5.html | 4 +- dir_90437c84e3362b0a8643fec7bc701e98.html | 2 +- dir_97588e98cf49a80ecbc724cd3683e378.html | 2 +- dir_a458271cf67381cc44c7b93b9de17445.html | 2 +- dir_c5918bf316cd8ba36163b1fb04c36ff1.html | 2 +- dir_c7a77980ae7e7fc5fc31addf76edb68e.html | 2 +- dir_c8a8870798f18a14afbce47230dc4059.html | 2 +- dir_d58599d02cf6d173f74e405e0cd75d7f.html | 2 +- dir_f637a10540c44fe355bc4c0eb96028af.html | 2 +- dir_fbb0c86b2da7cd2924ef3da30261f5a2.html | 4 +- files.html | 52 +- ...u_s_b_f_t_d_i_loopback_2pgmstrings_8h.html | 10 +- ..._t_d_i_loopback_2pgmstrings_8h_source.html | 2 +- functions.html | 2 +- functions_0x62.html | 51 +- functions_0x63.html | 2 +- functions_0x64.html | 4 +- functions_0x65.html | 27 +- functions_0x66.html | 2 +- functions_0x67.html | 63 +- functions_0x68.html | 2 +- functions_0x69.html | 44 +- functions_0x6a.html | 2 +- functions_0x6b.html | 2 +- functions_0x6c.html | 2 +- functions_0x6d.html | 2 +- functions_0x6e.html | 2 +- functions_0x6f.html | 2 +- functions_0x70.html | 30 +- functions_0x71.html | 2 +- functions_0x72.html | 20 +- functions_0x73.html | 38 +- functions_0x74.html | 2 +- functions_0x75.html | 2 +- functions_0x76.html | 2 +- functions_0x77.html | 24 +- functions_0x78.html | 14 +- functions_0x79.html | 2 +- functions_0x7a.html | 2 +- functions_enum.html | 2 +- functions_eval.html | 2 +- functions_func.html | 2 +- functions_func_0x62.html | 2 +- functions_func_0x63.html | 2 +- functions_func_0x64.html | 4 +- functions_func_0x65.html | 2 +- functions_func_0x66.html | 2 +- functions_func_0x67.html | 57 +- functions_func_0x68.html | 2 +- functions_func_0x69.html | 44 +- functions_func_0x6a.html | 2 +- functions_func_0x6b.html | 2 +- functions_func_0x6c.html | 2 +- functions_func_0x6d.html | 2 +- functions_func_0x6e.html | 2 +- functions_func_0x6f.html | 2 +- functions_func_0x70.html | 15 +- functions_func_0x72.html | 15 +- functions_func_0x73.html | 29 +- functions_func_0x74.html | 2 +- functions_func_0x75.html | 2 +- functions_func_0x77.html | 2 +- functions_func_0x78.html | 5 +- functions_type.html | 2 +- functions_vars.html | 2 +- functions_vars_0x62.html | 57 +- functions_vars_0x63.html | 2 +- functions_vars_0x64.html | 2 +- functions_vars_0x65.html | 11 +- functions_vars_0x67.html | 2 +- functions_vars_0x68.html | 2 +- functions_vars_0x69.html | 2 +- functions_vars_0x6b.html | 2 +- functions_vars_0x6c.html | 2 +- functions_vars_0x6d.html | 2 +- functions_vars_0x6e.html | 2 +- functions_vars_0x6f.html | 2 +- functions_vars_0x70.html | 11 +- functions_vars_0x71.html | 2 +- functions_vars_0x72.html | 5 +- functions_vars_0x73.html | 5 +- functions_vars_0x74.html | 2 +- functions_vars_0x75.html | 2 +- functions_vars_0x76.html | 2 +- functions_vars_0x77.html | 16 +- functions_vars_0x78.html | 11 +- functions_vars_0x79.html | 2 +- functions_vars_0x7a.html | 2 +- globals.html | 2 +- globals_0x61.html | 8 +- globals_0x62.html | 11 +- globals_0x63.html | 2 +- globals_0x64.html | 8 +- globals_0x65.html | 6 +- globals_0x66.html | 3 +- globals_0x67.html | 2 +- globals_0x68.html | 3 +- globals_0x69.html | 2 +- globals_0x6b.html | 2 +- globals_0x6c.html | 35 +- globals_0x6d.html | 3 +- globals_0x6e.html | 2 +- globals_0x6f.html | 2 +- globals_0x70.html | 4 +- globals_0x72.html | 18 +- globals_0x73.html | 8 +- globals_0x74.html | 2 +- globals_0x75.html | 5 +- globals_0x76.html | 2 +- globals_0x77.html | 5 +- globals_0x78.html | 29 +- globals_0x79.html | 3 +- globals_0x7a.html | 8 +- globals_defs.html | 2 +- globals_defs_0x61.html | 2 +- globals_defs_0x62.html | 6 +- globals_defs_0x63.html | 2 +- globals_defs_0x64.html | 9 +- globals_defs_0x65.html | 6 +- globals_defs_0x66.html | 2 +- globals_defs_0x67.html | 2 +- globals_defs_0x68.html | 3 +- globals_defs_0x69.html | 2 +- globals_defs_0x6b.html | 2 +- globals_defs_0x6c.html | 2 +- globals_defs_0x6d.html | 3 +- globals_defs_0x6e.html | 2 +- globals_defs_0x6f.html | 2 +- globals_defs_0x70.html | 2 +- globals_defs_0x72.html | 2 +- globals_defs_0x73.html | 2 +- globals_defs_0x74.html | 2 +- globals_defs_0x75.html | 2 +- globals_defs_0x76.html | 2 +- globals_defs_0x77.html | 5 +- globals_defs_0x78.html | 25 +- globals_enum.html | 6 +- globals_eval.html | 62 +- globals_func.html | 2 +- globals_type.html | 2 +- globals_vars.html | 4 +- graph_legend.html | 2 +- hexdump_8h.html | 4 +- hexdump_8h__dep__incl.map | 84 +- hexdump_8h__dep__incl.md5 | 2 +- hexdump_8h__dep__incl.png | Bin 222094 -> 220592 bytes hexdump_8h_source.html | 2 +- hid_8cpp.html | 6 +- hid_8cpp_source.html | 183 ++ hid_8h.html | 140 +- hid_8h_source.html | 2 +- hidboot_8cpp.html | 8 +- hidboot_8cpp_source.html | 253 +++ hidboot_8h.html | 22 +- hidboot_8h_source.html | 2 +- hidescriptorparser_8cpp.html | 8 +- hidescriptorparser_8cpp_source.html | 1812 +++++++++++++++++ hidescriptorparser_8h.html | 2 +- hidescriptorparser_8h_source.html | 2 +- hidjoystickrptparser_8cpp.html | 6 +- hidjoystickrptparser_8cpp_source.html | 194 ++ hidjoystickrptparser_8h.html | 4 +- hidjoystickrptparser_8h_source.html | 2 +- hiduniversal_8cpp.html | 6 +- hiduniversal_8cpp_source.html | 517 +++++ hiduniversal_8h.html | 2 +- hiduniversal_8h_source.html | 2 +- hidusagestr_8h.html | 4 +- hidusagestr_8h_source.html | 2 +- hidusagetitlearrays_8cpp.html | 8 +- hidusagetitlearrays_8cpp_source.html | 1146 +++++++++++ hierarchy.html | 15 +- hub__demo_2pgmstrings_8h.html | 10 +- hub__demo_2pgmstrings_8h_source.html | 2 +- index.html | 6 +- inherit_graph_46.map | 27 +- inherit_graph_46.md5 | 2 +- inherit_graph_46.png | Bin 34905 -> 31136 bytes inherits.html | 4 +- le3dp__rptparser_8cpp.html | 6 +- le3dp__rptparser_8cpp_source.html | 142 ++ le3dp__rptparser_8h.html | 4 +- le3dp__rptparser_8h_source.html | 2 +- masstorage_8cpp.html | 6 +- masstorage_8cpp_source.html | 745 +++++++ masstorage_8h.html | 96 +- masstorage_8h_source.html | 2 +- max3421e_8h.html | 308 ++- max3421e_8h__dep__incl.map | 80 +- max3421e_8h__dep__incl.md5 | 2 +- max3421e_8h__dep__incl.png | Bin 265541 -> 265187 bytes max3421e_8h_source.html | 2 +- max___l_c_d_8cpp.html | 24 +- max___l_c_d_8cpp_source.html | 349 ++++ max___l_c_d_8h.html | 58 +- max___l_c_d_8h_source.html | 2 +- md__wii_camera_readme.html | 2 +- message_8cpp.html | 8 +- message_8cpp_source.html | 130 ++ message_8h.html | 8 +- message_8h__dep__incl.map | 86 +- message_8h__dep__incl.md5 | 2 +- message_8h__dep__incl.png | Bin 228016 -> 221392 bytes message_8h_source.html | 2 +- pages.html | 2 +- parsetools_8cpp.html | 6 +- parsetools_8cpp_source.html | 171 ++ parsetools_8h.html | 4 +- parsetools_8h_source.html | 2 +- printhex_8h.html | 10 +- printhex_8h__dep__incl.map | 94 +- printhex_8h__dep__incl.md5 | 2 +- printhex_8h__dep__incl.png | Bin 413765 -> 393149 bytes printhex_8h_source.html | 2 +- search/all_61.js | 8 +- search/all_62.js | 16 +- search/all_64.js | 6 +- search/all_65.js | 6 +- search/all_66.js | 2 +- search/all_67.js | 17 +- search/all_68.js | 2 +- search/all_69.js | 6 +- search/all_6c.js | 25 +- search/all_6d.js | 2 +- search/all_70.js | 14 +- search/all_72.js | 20 +- search/all_73.js | 19 +- search/all_75.js | 2 +- search/all_77.js | 7 +- search/all_78.js | 23 +- search/all_79.js | 2 +- search/all_7a.js | 4 +- search/classes_78.js | 3 +- search/defines_62.js | 3 +- search/defines_64.js | 2 +- search/defines_65.js | 4 +- search/defines_68.js | 2 +- search/defines_6d.js | 2 +- search/defines_77.js | 3 +- search/defines_78.js | 14 +- search/enums_61.js | 2 +- search/enums_62.js | 2 +- search/enums_6c.js | 4 +- search/enumvalues_61.js | 6 +- search/enumvalues_62.js | 4 +- search/enumvalues_64.js | 2 +- search/enumvalues_66.js | 2 +- search/enumvalues_6c.js | 21 +- search/enumvalues_72.js | 15 +- search/enumvalues_73.js | 4 +- search/enumvalues_75.js | 2 +- search/enumvalues_78.js | 4 +- search/enumvalues_79.js | 2 +- search/enumvalues_7a.js | 4 +- search/files_78.js | 4 +- search/functions_64.js | 2 +- search/functions_67.js | 17 +- search/functions_69.js | 6 +- search/functions_70.js | 10 +- search/functions_72.js | 4 +- search/functions_73.js | 14 +- search/functions_78.js | 3 +- search/variables_62.js | 6 +- search/variables_65.js | 2 +- search/variables_70.js | 4 +- search/variables_72.js | 1 + search/variables_73.js | 1 + search/variables_77.js | 6 +- search/variables_78.js | 4 +- ...t_a_c_m___f_u_n_c___d_e_s_c_r-members.html | 2 +- struct_a_c_m___f_u_n_c___d_e_s_c_r.html | 15 +- ...g_m_n_t___f_u_n_c___d_e_s_c_r-members.html | 2 +- ...l_l___m_g_m_n_t___f_u_n_c___d_e_s_c_r.html | 17 +- ...s_s___n_o_t_i_f_i_c_a_t_i_o_n-members.html | 2 +- ...t_c_l_a_s_s___n_o_t_i_f_i_c_a_t_i_o_n.html | 19 +- struct_capacity-members.html | 2 +- struct_capacity.html | 9 +- struct_command_block_wrapper-members.html | 2 +- struct_command_block_wrapper.html | 25 +- struct_command_status_wrapper-members.html | 2 +- struct_command_status_wrapper.html | 15 +- struct_ep_info-members.html | 2 +- struct_ep_info.html | 19 +- struct_game_pad_event_data-members.html | 2 +- struct_game_pad_event_data.html | 33 +- ...o_r___l_e_n___a_n_d___t_y_p_e-members.html | 2 +- ...r_i_p_t_o_r___l_e_n___a_n_d___t_y_p_e.html | 11 +- struct_hid_item_prefix-members.html | 2 +- struct_hid_item_prefix.html | 13 +- struct_hub_descriptor-members.html | 2 +- struct_hub_descriptor.html | 29 +- struct_hub_event-members.html | 2 +- struct_hub_event.html | 15 +- struct_inquiry_response-members.html | 2 +- struct_inquiry_response.html | 53 +- struct_k_b_d_i_n_f_o-members.html | 2 +- struct_k_b_d_i_n_f_o.html | 27 +- struct_k_b_d_l_e_d_s-members.html | 2 +- struct_k_b_d_l_e_d_s.html | 19 +- struct_l_i_n_e___c_o_d_i_n_g-members.html | 2 +- struct_l_i_n_e___c_o_d_i_n_g.html | 15 +- struct_m_o_d_i_f_i_e_r_k_e_y_s-members.html | 2 +- struct_m_o_d_i_f_i_e_r_k_e_y_s.html | 23 +- struct_m_o_u_s_e_i_n_f_o-members.html | 2 +- struct_m_o_u_s_e_i_n_f_o.html | 19 +- struct_main_item_i_o_feature-members.html | 2 +- struct_main_item_i_o_feature.html | 23 +- struct_multi_value_buffer-members.html | 2 +- struct_multi_value_buffer.html | 11 +- struct_request_sense_responce-members.html | 2 +- struct_request_sense_responce.html | 35 +- struct_s_e_t_u_p___p_k_t-members.html | 2 +- struct_s_e_t_u_p___p_k_t.html | 27 +- ...n_g_e_r___f_u_n_c___d_e_s_c_r-members.html | 2 +- ...l___r_i_n_g_e_r___f_u_n_c___d_e_s_c_r.html | 17 +- ...t_i_o_n___d_e_s_c_r_i_p_t_o_r-members.html | 2 +- ...g_u_r_a_t_i_o_n___d_e_s_c_r_i_p_t_o_r.html | 23 +- ...v_i_c_e___d_e_s_c_r_i_p_t_o_r-members.html | 2 +- ...b___d_e_v_i_c_e___d_e_s_c_r_i_p_t_o_r.html | 35 +- ...o_i_n_t___d_e_s_c_r_i_p_t_o_r-members.html | 2 +- ...e_n_d_p_o_i_n_t___d_e_s_c_r_i_p_t_o_r.html | 19 +- ...__h_i_d___d_e_s_c_r_i_p_t_o_r-members.html | 2 +- ...t_u_s_b___h_i_d___d_e_s_c_r_i_p_t_o_r.html | 21 +- ...f_a_c_e___d_e_s_c_r_i_p_t_o_r-members.html | 2 +- ...n_t_e_r_f_a_c_e___d_e_s_c_r_i_p_t_o_r.html | 25 +- struct_usb_device-members.html | 2 +- struct_usb_device.html | 15 +- struct_usb_device_address-members.html | 2 +- struct_usb_device_address.html | 17 +- usb__ch9_8h.html | 144 +- usb__ch9_8h__dep__incl.map | 84 +- usb__ch9_8h__dep__incl.md5 | 2 +- usb__ch9_8h__dep__incl.png | Bin 235003 -> 243728 bytes usb__ch9_8h_source.html | 2 +- usbhost_8h.html | 4 +- usbhost_8h__dep__incl.map | 58 +- usbhost_8h__dep__incl.md5 | 2 +- usbhost_8h__dep__incl.png | Bin 170520 -> 170504 bytes usbhost_8h_source.html | 2 +- usbhub_8cpp.html | 8 +- usbhub_8cpp_source.html | 513 +++++ usbhub_8h.html | 158 +- usbhub_8h_source.html | 2 +- 532 files changed, 23206 insertions(+), 5343 deletions(-) create mode 100644 _b_t_d_8cpp_source.html create mode 100644 _p_s3_b_t_8cpp_source.html create mode 100644 _p_s3_u_s_b_8cpp_source.html create mode 100644 _r_e_a_d_m_e_8md_source.html create mode 100644 _s_p_p_8cpp_source.html create mode 100644 _usb_8cpp_source.html create mode 100644 _wii_8cpp_source.html rename _x_b_o_x_u_s_b_8cpp.html => _wii_camera_readme_8md_source.html (60%) create mode 100644 _x_b_o_x_r_e_c_v_8cpp_source.html delete mode 100644 _x_b_o_x_u_s_b_8cpp__incl.map delete mode 100644 _x_b_o_x_u_s_b_8cpp__incl.md5 delete mode 100644 _x_b_o_x_u_s_b_8cpp__incl.png delete mode 100644 _x_b_o_x_u_s_b_8h.html delete mode 100644 _x_b_o_x_u_s_b_8h__dep__incl.map delete mode 100644 _x_b_o_x_u_s_b_8h__dep__incl.md5 delete mode 100644 _x_b_o_x_u_s_b_8h__dep__incl.png delete mode 100644 _x_b_o_x_u_s_b_8h__incl.map delete mode 100644 _x_b_o_x_u_s_b_8h__incl.md5 delete mode 100644 _x_b_o_x_u_s_b_8h__incl.png delete mode 100644 _x_b_o_x_u_s_b_8h_source.html create mode 100644 adk_8cpp_source.html create mode 100644 cdcacm_8cpp_source.html create mode 100644 cdcftdi_8cpp_source.html create mode 100644 cdcprolific_8cpp_source.html delete mode 100644 class_x_b_o_x_u_s_b-members.html delete mode 100644 class_x_b_o_x_u_s_b.html delete mode 100644 class_x_b_o_x_u_s_b__coll__graph.map delete mode 100644 class_x_b_o_x_u_s_b__coll__graph.md5 delete mode 100644 class_x_b_o_x_u_s_b__coll__graph.png delete mode 100644 class_x_b_o_x_u_s_b__inherit__graph.map delete mode 100644 class_x_b_o_x_u_s_b__inherit__graph.md5 delete mode 100644 class_x_b_o_x_u_s_b__inherit__graph.png create mode 100644 hid_8cpp_source.html create mode 100644 hidboot_8cpp_source.html create mode 100644 hidescriptorparser_8cpp_source.html create mode 100644 hidjoystickrptparser_8cpp_source.html create mode 100644 hiduniversal_8cpp_source.html create mode 100644 hidusagetitlearrays_8cpp_source.html create mode 100644 le3dp__rptparser_8cpp_source.html create mode 100644 masstorage_8cpp_source.html create mode 100644 max___l_c_d_8cpp_source.html create mode 100644 message_8cpp_source.html create mode 100644 parsetools_8cpp_source.html create mode 100644 usbhub_8cpp_source.html diff --git a/Doxyfile b/Doxyfile index bcadec01..3d3acc1e 100644 --- a/Doxyfile +++ b/Doxyfile @@ -52,7 +52,7 @@ PROJECT_LOGO = # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. -OUTPUT_DIRECTORY = /Users/Lauszus/Desktop/DOC/docs +OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output @@ -303,7 +303,7 @@ IDL_PROPERTY_SUPPORT = YES # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. -DISTRIBUTE_GROUP_DOC = NO +DISTRIBUTE_GROUP_DOC = YES # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a @@ -756,7 +756,7 @@ EXCLUDE_SYMLINKS = NO # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* -EXCLUDE_PATTERNS = +EXCLUDE_PATTERNS = XBOXUSB.* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the @@ -841,7 +841,7 @@ USE_MDFILE_AS_MAINPAGE = README.md # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. @@ -1330,7 +1330,7 @@ EXTRA_SEARCH_MAPPINGS = # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. -GENERATE_LATEX = YES +GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be @@ -1621,7 +1621,7 @@ INCLUDE_FILE_PATTERNS = # undefined via #undef or recursively expanded use the := operator # instead of the = operator. -PREDEFINED = +PREDEFINED = WIICAMERA # 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 667db33c..ca939f78 100644 --- a/_b_t_d_8cpp.html +++ b/_b_t_d_8cpp.html @@ -98,7 +98,9 @@ Include dependency graph for BTD.cpp: - + +

Go to the source code of this file.

+
@@ -115,12 +117,14 @@ Macros

Macros

#define DEBUG
+

Definition at line 19 of file BTD.cpp.

+
diff --git a/_b_t_d_8cpp_source.html b/_b_t_d_8cpp_source.html new file mode 100644 index 00000000..8aa0af2c --- /dev/null +++ b/_b_t_d_8cpp_source.html @@ -0,0 +1,1282 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/BTD.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
BTD.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
+
2 
+
3  This software may be distributed and modified under the terms of the GNU
+
4  General Public License version 2 (GPL2) as published by the Free Software
+
5  Foundation and appearing in the file GPL2.TXT included in the packaging of
+
6  this file. Please note that GPL2 Section 2[b] requires that all works based
+
7  on this software must also be made publicly available under the terms of
+
8  the GPL2 ("Copyleft").
+
9 
+
10  Contact information
+
11  -------------------
+
12 
+
13  Kristian Lauszus, TKJ Electronics
+
14  Web : http://www.tkjelectronics.com
+
15  e-mail : kristianl@tkjelectronics.com
+
16  */
+
17 
+
18 #include "BTD.h"
+
19 #define DEBUG // Uncomment to print data for debugging
+
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;
+
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
+
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();
+
56 #ifdef EXTRADEBUG
+
57  Notify(PSTR("\r\nBTD Init"));
+
58 #endif
+
59  // check if address has already been assigned to an instance
+
60  if (bAddress) {
+
61 #ifdef DEBUG
+
62  Notify(PSTR("\r\nAddress in use"));
+
63 #endif
+ +
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"));
+
73 #endif
+ +
75  }
+
76 
+
77  if (!p->epinfo) {
+
78 #ifdef DEBUG
+
79  Notify(PSTR("\r\nepinfo is null"));
+
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;
+
116 #ifdef DEBUG
+
117  Notify(PSTR("\r\nsetAddr: "));
+
118 #endif
+
119  PrintHex<uint8_t>(rcode);
+
120  return rcode;
+
121  }
+
122 #ifdef EXTRADEBUG
+
123  Notify(PSTR("\r\nAddr: "));
+
124  PrintHex<uint8_t>(bAddress);
+
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) {
+
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"));
+
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]);
+
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) {
+
446 #ifdef DEBUG
+
447  Notify(PSTR("\r\nPairing with wiimote"));
+
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 {
+
630 #ifdef DEBUG
+
631  Notify(PSTR("\r\nTrying to connect one more time..."));
+
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;
+
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);
+
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);
+
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 }
+
+ + + + diff --git a/_b_t_d_8h.html b/_b_t_d_8h.html index 2ed63638..593286da 100644 --- a/_b_t_d_8h.html +++ b/_b_t_d_8h.html @@ -285,8 +285,6 @@ Macros   #define BTD_NUMSERVICES   4   -#define BTD_CONTROL_PIPE   0 - 

Macro Definition Documentation

@@ -299,6 +297,8 @@ Macros
+

Definition at line 34 of file BTD.h.

+
@@ -311,17 +311,7 @@ Macros
-
- - -
-
- - - - -
#define BTD_CONTROL_PIPE   0
-
+

Definition at line 36 of file BTD.h.

@@ -335,6 +325,8 @@ Macros
+

Definition at line 130 of file BTD.h.

+
@@ -347,6 +339,8 @@ Macros
+

Definition at line 131 of file BTD.h.

+
@@ -359,6 +353,8 @@ Macros
+

Definition at line 31 of file BTD.h.

+
@@ -371,6 +367,8 @@ Macros
+

Definition at line 87 of file BTD.h.

+
@@ -383,6 +381,8 @@ Macros
+

Definition at line 90 of file BTD.h.

+
@@ -395,6 +395,8 @@ Macros
+

Definition at line 100 of file BTD.h.

+
@@ -407,6 +409,8 @@ Macros
+

Definition at line 101 of file BTD.h.

+
@@ -419,6 +423,8 @@ Macros
+

Definition at line 84 of file BTD.h.

+
@@ -431,6 +437,8 @@ Macros
+

Definition at line 96 of file BTD.h.

+
@@ -443,6 +451,8 @@ Macros
+

Definition at line 86 of file BTD.h.

+
@@ -455,6 +465,8 @@ Macros
+

Definition at line 89 of file BTD.h.

+
@@ -467,6 +479,8 @@ Macros
+

Definition at line 85 of file BTD.h.

+
@@ -479,6 +493,8 @@ Macros
+

Definition at line 82 of file BTD.h.

+
@@ -491,6 +507,8 @@ Macros
+

Definition at line 83 of file BTD.h.

+
@@ -503,6 +521,8 @@ Macros
+

Definition at line 95 of file BTD.h.

+
@@ -515,6 +535,8 @@ Macros
+

Definition at line 94 of file BTD.h.

+
@@ -527,6 +549,8 @@ Macros
+

Definition at line 102 of file BTD.h.

+
@@ -539,6 +563,8 @@ Macros
+

Definition at line 97 of file BTD.h.

+
@@ -551,6 +577,8 @@ Macros
+

Definition at line 92 of file BTD.h.

+
@@ -563,6 +591,8 @@ Macros
+

Definition at line 103 of file BTD.h.

+
@@ -575,6 +605,8 @@ Macros
+

Definition at line 93 of file BTD.h.

+
@@ -587,6 +619,8 @@ Macros
+

Definition at line 99 of file BTD.h.

+
@@ -599,6 +633,8 @@ Macros
+

Definition at line 98 of file BTD.h.

+
@@ -611,6 +647,8 @@ Macros
+

Definition at line 88 of file BTD.h.

+
@@ -623,6 +661,8 @@ Macros
+

Definition at line 91 of file BTD.h.

+
@@ -635,6 +675,8 @@ Macros
+

Definition at line 42 of file BTD.h.

+
@@ -647,6 +689,8 @@ Macros
+

Definition at line 45 of file BTD.h.

+
@@ -659,6 +703,8 @@ Macros
+

Definition at line 71 of file BTD.h.

+
@@ -671,6 +717,8 @@ Macros
+

Definition at line 72 of file BTD.h.

+
@@ -683,6 +731,8 @@ Macros
+

Definition at line 79 of file BTD.h.

+
@@ -695,6 +745,8 @@ Macros
+

Definition at line 52 of file BTD.h.

+
@@ -707,6 +759,8 @@ Macros
+

Definition at line 48 of file BTD.h.

+
@@ -719,6 +773,8 @@ Macros
+

Definition at line 54 of file BTD.h.

+
@@ -731,6 +787,8 @@ Macros
+

Definition at line 49 of file BTD.h.

+
@@ -743,6 +801,8 @@ Macros
+

Definition at line 55 of file BTD.h.

+
@@ -755,6 +815,8 @@ Macros
+

Definition at line 73 of file BTD.h.

+
@@ -767,6 +829,8 @@ Macros
+

Definition at line 57 of file BTD.h.

+
@@ -779,6 +843,8 @@ Macros
+

Definition at line 56 of file BTD.h.

+
@@ -791,6 +857,8 @@ Macros
+

Definition at line 60 of file BTD.h.

+
@@ -803,6 +871,8 @@ Macros
+

Definition at line 61 of file BTD.h.

+
@@ -815,6 +885,8 @@ Macros
+

Definition at line 68 of file BTD.h.

+
@@ -827,6 +899,8 @@ Macros
+

Definition at line 62 of file BTD.h.

+
@@ -839,6 +913,8 @@ Macros
+

Definition at line 64 of file BTD.h.

+
@@ -851,6 +927,8 @@ Macros
+

Definition at line 65 of file BTD.h.

+
@@ -863,6 +941,8 @@ Macros
+

Definition at line 66 of file BTD.h.

+
@@ -875,6 +955,8 @@ Macros
+

Definition at line 63 of file BTD.h.

+
@@ -887,6 +969,8 @@ Macros
+

Definition at line 67 of file BTD.h.

+
@@ -899,6 +983,8 @@ Macros
+

Definition at line 75 of file BTD.h.

+
@@ -911,6 +997,8 @@ Macros
+

Definition at line 40 of file BTD.h.

+
@@ -923,6 +1011,8 @@ Macros
+

Definition at line 47 of file BTD.h.

+
@@ -935,6 +1025,8 @@ Macros
+

Definition at line 43 of file BTD.h.

+
@@ -947,6 +1039,8 @@ Macros
+

Definition at line 76 of file BTD.h.

+
@@ -959,6 +1053,8 @@ Macros
+

Definition at line 77 of file BTD.h.

+
@@ -971,6 +1067,8 @@ Macros
+

Definition at line 74 of file BTD.h.

+
@@ -983,6 +1081,8 @@ Macros
+

Definition at line 53 of file BTD.h.

+
@@ -995,6 +1095,8 @@ Macros
+

Definition at line 41 of file BTD.h.

+
@@ -1007,6 +1109,8 @@ Macros
+

Definition at line 51 of file BTD.h.

+
@@ -1019,6 +1123,8 @@ Macros
+

Definition at line 44 of file BTD.h.

+
@@ -1031,6 +1137,8 @@ Macros
+

Definition at line 78 of file BTD.h.

+
@@ -1043,6 +1151,8 @@ Macros
+

Definition at line 123 of file BTD.h.

+
@@ -1055,6 +1165,8 @@ Macros
+

Definition at line 124 of file BTD.h.

+
@@ -1067,6 +1179,8 @@ Macros
+

Definition at line 37 of file BTD.h.

+
@@ -1079,6 +1193,8 @@ Macros
+

Definition at line 106 of file BTD.h.

+
@@ -1091,6 +1207,8 @@ Macros
+

Definition at line 109 of file BTD.h.

+
@@ -1103,6 +1221,8 @@ Macros
+

Definition at line 110 of file BTD.h.

+
@@ -1115,6 +1235,8 @@ Macros
+

Definition at line 107 of file BTD.h.

+
@@ -1127,6 +1249,8 @@ Macros
+

Definition at line 108 of file BTD.h.

+
@@ -1139,6 +1263,8 @@ Macros
+

Definition at line 111 of file BTD.h.

+
@@ -1151,6 +1277,8 @@ Macros
+

Definition at line 112 of file BTD.h.

+
@@ -1163,6 +1291,8 @@ Macros
+

Definition at line 113 of file BTD.h.

+
@@ -1175,6 +1305,8 @@ Macros
+

Definition at line 114 of file BTD.h.

+
@@ -1187,6 +1319,8 @@ Macros
+

Definition at line 117 of file BTD.h.

+
@@ -1199,6 +1333,8 @@ Macros
+

Definition at line 26 of file BTD.h.

+
@@ -1211,6 +1347,8 @@ Macros
+

Definition at line 25 of file BTD.h.

+
@@ -1223,6 +1361,8 @@ Macros
+

Definition at line 28 of file BTD.h.

+
@@ -1235,6 +1375,8 @@ Macros
+

Definition at line 27 of file BTD.h.

+
@@ -1247,6 +1389,8 @@ Macros
+

Definition at line 122 of file BTD.h.

+
@@ -1259,6 +1403,8 @@ Macros
+

Definition at line 121 of file BTD.h.

+
@@ -1271,6 +1417,8 @@ Macros
+

Definition at line 118 of file BTD.h.

+
@@ -1283,6 +1431,8 @@ Macros
+

Definition at line 128 of file BTD.h.

+
@@ -1295,12 +1445,14 @@ Macros
+

Definition at line 127 of file BTD.h.

+
diff --git a/_b_t_d_8h_source.html b/_b_t_d_8h_source.html index b28ee6b2..0178b8ce 100644 --- a/_b_t_d_8h_source.html +++ b/_b_t_d_8h_source.html @@ -218,141 +218,132 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
128 #define WI_PROTOCOL_BT 0x01 // Bluetooth Programming Interface
129 
130 #define BTD_MAX_ENDPOINTS 4
-
131 #define BTD_NUMSERVICES 4 // Max number of Bluetooth services
+
131 #define BTD_NUMSERVICES 4 // Max number of Bluetooth services
132 
-
133 class BluetoothService { // All services should include this class
-
134 public:
-
135  virtual void ACLData(uint8_t* ACLData); // Used to pass acldata to the services
-
136  virtual void Run(); // Used to run the different state machines
-
137  virtual void Reset(); // Used to reset the services
-
138  virtual void disconnect(); // Used to disconnect both the L2CAP Channel and the HCI Connection
-
139 };
-
140 
-
141 class BTD : public USBDeviceConfig, public UsbConfigXtracter {
-
142 public:
-
143  BTD(USB *p); // Constructor
-
144 
-
145  // USBDeviceConfig implementation
-
146  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
-
147  virtual uint8_t Release();
-
148  virtual uint8_t Poll();
-
149  virtual uint8_t GetAddress() { return bAddress; };
-
150  virtual bool isReady() { return bPollEnable; };
-
151 
-
152  // UsbConfigXtracter implementation, used to extract endpoint information
-
153  virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
-
154 
-
155  bool watingForConnection; // Use this to see if it is waiting for a incoming connection
-
156  void disconnect() { // Used this void to disconnect all services
-
157  for (uint8_t i=0; i<BTD_NUMSERVICES; i++)
-
158  if (btService[i])
-
159  btService[i]->disconnect(); // Disconnect both the L2CAP Channel and the HCI Connection
-
160  };
-
161 
-
162  /* Register bluetooth dongle members/services */
-
163  int8_t registerServiceClass(BluetoothService *pService) {
-
164  for (uint8_t i=0; i<BTD_NUMSERVICES; i++) {
-
165  if (!btService[i]) {
-
166  btService[i] = pService;
-
167  return i; // Return ID
-
168  }
-
169  }
-
170  return -1; // ErrorregisterServiceClass
-
171  };
-
172 
-
173  bool l2capConnectionClaimed; // This is used by the service to know when to store the device information
-
174 
-
175  const char* btdName; // These are set by the SPP library
-
176  const char* btdPin;
-
177 
-
178  uint8_t my_bdaddr[6]; // The bluetooth dongles Bluetooth address
-
179  uint16_t hci_handle; // HCI handle for the last connection
-
180  uint8_t disc_bdaddr[6]; // Last incoming devices Bluetooth address
-
181  uint8_t remote_name[30]; // First 30 chars of last remote name
-
182  uint8_t hci_version;
-
183 
-
184  bool connectToWii; // Used to only send the ACL data to the wiimote
-
185  bool incomingWii;
-
186  bool pairWithWii;
-
187  bool motionPlusInside; // True if it's the new Wiimote with the Motion Plus Inside
-
188 
-
189  /* HCI Commands */
-
190  void HCI_Command(uint8_t* data, uint16_t nbytes);
-
191  void hci_reset();
-
192  void hci_read_bdaddr();
-
193  void hci_read_local_version_information();
-
194  void hci_set_local_name(const char* name);
-
195  void hci_write_scan_enable();
-
196  void hci_remote_name();
-
197  void hci_accept_connection();
-
198  void hci_write_scan_disable();
-
199  void hci_disconnect(uint16_t handle);
-
200  void hci_pin_code_request_reply();
-
201  void hci_pin_code_negative_request_reply();
-
202  void hci_link_key_request_negative_reply();
-
203  void hci_authentication_request();
-
204  void hci_inquiry();
-
205  void hci_inquiry_cancel();
-
206  void hci_connect();
-
207 
-
208  /* L2CAP Commands */
-
209  void L2CAP_Command(uint16_t handle, uint8_t* data, uint8_t nbytes, uint8_t channelLow = 0x01, uint8_t channelHigh = 0x00); // Standard L2CAP header: Channel ID (0x01) for ACL-U
-
210  void l2cap_connection_request(uint16_t handle, uint8_t rxid, uint8_t* scid, uint16_t psm);
-
211  void l2cap_connection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid, uint8_t result);
-
212  void l2cap_config_request(uint16_t handle, uint8_t rxid, uint8_t* dcid);
-
213  void l2cap_config_response(uint16_t handle, uint8_t rxid, uint8_t* scid);
-
214  void l2cap_disconnection_request(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid);
-
215  void l2cap_disconnection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid);
-
216  void l2cap_information_response(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh);
-
217 
-
218 protected:
-
219  /* Mandatory USB members */
-
220  USB *pUsb;
-
221  uint8_t bAddress; // Device address
-
222  EpInfo epInfo[BTD_MAX_ENDPOINTS]; // Endpoint info structure
-
223 
-
224  uint8_t bConfNum; // Configuration number
-
225  uint8_t bNumEP; // Total number of endpoints in the configuration
-
226  uint32_t qNextPollTime; // Next poll time
-
227 
-
228  #define BTD_CONTROL_PIPE 0 // Bluetooth dongles control endpoint
-
229  static const uint8_t BTD_EVENT_PIPE; // HCI event endpoint index
-
230  static const uint8_t BTD_DATAIN_PIPE; // ACL In endpoint index
-
231  static const uint8_t BTD_DATAOUT_PIPE; // ACL Out endpoint index
-
232 
-
233  void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR* ep_ptr);
-
234 
-
235 private:
-
236  BluetoothService* btService[BTD_NUMSERVICES];
-
237 
-
238  bool bPollEnable;
-
239  uint8_t pollInterval;
-
240 
-
241  /* variables used by high level HCI task */
-
242  uint8_t hci_state; //current state of bluetooth hci connection
-
243  uint16_t hci_counter; // counter used for bluetooth hci reset loops
-
244  uint8_t hci_num_reset_loops; // this value indicate how many times it should read before trying to reset
-
245  uint16_t hci_event_flag; // hci flags of received bluetooth events
-
246  uint8_t inquiry_counter;
-
247 
-
248  uint8_t hcibuf[BULK_MAXPKTSIZE];//General purpose buffer for hci data
-
249  uint8_t l2capinbuf[BULK_MAXPKTSIZE];//General purpose buffer for l2cap in data
-
250  uint8_t l2capoutbuf[BULK_MAXPKTSIZE];//General purpose buffer for l2cap out data
-
251 
-
252  /* State machines */
-
253  void HCI_event_task(); // Poll the HCI event pipe
-
254  void HCI_task(); // HCI state machine
-
255  void ACL_event_task(); // ACL input pipe
-
256 
-
257  /* Used to set the Bluetooth Address internally to the PS3 Controllers */
-
258  void setBdaddr(uint8_t* BDADDR);
-
259  void setMoveBdaddr(uint8_t* BDADDR);
-
260 };
-
261 #endif
+
134 class BluetoothService {
+
135 public:
+
140  virtual void ACLData(uint8_t* ACLData);
+
142  virtual void Run();
+
144  virtual void Reset();
+
146  virtual void disconnect();
+
147 };
+
148 
+
153 class BTD : public USBDeviceConfig, public UsbConfigXtracter {
+
154 public:
+
159  BTD(USB *p);
+
160 
+
169  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
+
174  virtual uint8_t Release();
+
179  virtual uint8_t Poll();
+
184  virtual uint8_t GetAddress() { return bAddress; };
+
189  virtual bool isReady() { return bPollEnable; };
+
201  virtual void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep);
+
205  void disconnect() {
+
206  for (uint8_t i=0; i<BTD_NUMSERVICES; i++)
+
207  if (btService[i])
+
208  btService[i]->disconnect();
+
209  };
+
215  int8_t registerServiceClass(BluetoothService *pService) {
+
216  for (uint8_t i=0; i<BTD_NUMSERVICES; i++) {
+
217  if (!btService[i]) {
+
218  btService[i] = pService;
+
219  return i; // Return ID
+
220  }
+
221  }
+
222  return -1; // ErrorregisterServiceClass
+
223  };
+
224 
+
231  void HCI_Command(uint8_t* data, uint16_t nbytes);
+
233  void hci_reset();
+
235  void hci_read_bdaddr();
+
237  void hci_read_local_version_information();
+
242  void hci_set_local_name(const char* name);
+
244  void hci_write_scan_enable();
+
246  void hci_write_scan_disable();
+
248  void hci_remote_name();
+
250  void hci_accept_connection();
+
255  void hci_disconnect(uint16_t handle);
+
261  void hci_pin_code_request_reply();
+
263  void hci_pin_code_negative_request_reply();
+
268  void hci_link_key_request_negative_reply();
+
270  void hci_authentication_request();
+
272  void hci_inquiry();
+
274  void hci_inquiry_cancel();
+
276  void hci_connect();
+
288  void L2CAP_Command(uint16_t handle, uint8_t* data, uint8_t nbytes, uint8_t channelLow = 0x01, uint8_t channelHigh = 0x00);
+
296  void l2cap_connection_request(uint16_t handle, uint8_t rxid, uint8_t* scid, uint16_t psm);
+
305  void l2cap_connection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid, uint8_t result);
+
312  void l2cap_config_request(uint16_t handle, uint8_t rxid, uint8_t* dcid);
+
319  void l2cap_config_response(uint16_t handle, uint8_t rxid, uint8_t* scid);
+
327  void l2cap_disconnection_request(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid);
+
335  void l2cap_disconnection_response(uint16_t handle, uint8_t rxid, uint8_t* dcid, uint8_t* scid);
+
342  void l2cap_information_response(uint16_t handle, uint8_t rxid, uint8_t infoTypeLow, uint8_t infoTypeHigh);
+
346  bool watingForConnection;
+
348  bool l2capConnectionClaimed;
+
350  bool sdpConnectionClaimed;
+
352  bool rfcommConnectionClaimed;
+
353 
+
355  const char* btdName;
+
357  const char* btdPin;
+
358 
+
360  uint8_t my_bdaddr[6];
+
362  uint16_t hci_handle;
+
364  uint8_t disc_bdaddr[6];
+
366  uint8_t remote_name[30];
+
372  uint8_t hci_version;
+
374  bool connectToWii;
+
376  bool incomingWii;
+
378  bool pairWithWii;
+
380  bool motionPlusInside;
+
382  bool wiiUProController;
+
383 
+
384 protected:
+
386  USB *pUsb;
+
388  uint8_t bAddress;
+
390  EpInfo epInfo[BTD_MAX_ENDPOINTS];
+
391 
+
393  uint8_t bConfNum;
+
395  uint8_t bNumEP;
+
397  uint32_t qNextPollTime;
+
398 
+
400  static const uint8_t BTD_CONTROL_PIPE;
+
402  static const uint8_t BTD_EVENT_PIPE;
+
404  static const uint8_t BTD_DATAIN_PIPE;
+
406  static const uint8_t BTD_DATAOUT_PIPE;
+
407 
+
412  void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR* ep_ptr);
+
413 
+
414 private:
+
415  BluetoothService* btService[BTD_NUMSERVICES];
+
416 
+
417  bool bPollEnable;
+
418  uint8_t pollInterval;
+
419 
+
420  /* Variables used by high level HCI task */
+
421  uint8_t hci_state; //current state of bluetooth hci connection
+
422  uint16_t hci_counter; // counter used for bluetooth hci reset loops
+
423  uint8_t hci_num_reset_loops; // this value indicate how many times it should read before trying to reset
+
424  uint16_t hci_event_flag; // hci flags of received bluetooth events
+
425  uint8_t inquiry_counter;
+
426 
+
427  uint8_t hcibuf[BULK_MAXPKTSIZE];//General purpose buffer for hci data
+
428  uint8_t l2capinbuf[BULK_MAXPKTSIZE];//General purpose buffer for l2cap in data
+
429  uint8_t l2capoutbuf[BULK_MAXPKTSIZE];//General purpose buffer for l2cap out data
+
430 
+
431  /* State machines */
+
432  void HCI_event_task(); // Poll the HCI event pipe
+
433  void HCI_task(); // HCI state machine
+
434  void ACL_event_task(); // ACL input pipe
+
435 
+
436  /* Used to set the Bluetooth Address internally to the PS3 Controllers */
+
437  void setBdaddr(uint8_t* BDADDR);
+
438  void setMoveBdaddr(uint8_t* BDADDR);
+
439 };
+
440 #endif
diff --git a/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h.html b/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h.html index e234db83..7c32e4db 100644 --- a/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h.html +++ b/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h.html @@ -119,6 +119,8 @@ Variables
+

Definition at line 6 of file pgmstrings.h.

+
@@ -135,6 +137,8 @@ Variables
+

Definition at line 5 of file pgmstrings.h.

+
@@ -151,6 +155,8 @@ Variables
+

Definition at line 4 of file pgmstrings.h.

+

Variable Documentation

@@ -164,12 +170,14 @@ Variables
+

Definition at line 10 of file pgmstrings.h.

+
diff --git a/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h_source.html b/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h_source.html index 5fb822fb..19f3a556 100644 --- a/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h_source.html +++ b/_h_i_d_2_u_s_b_h_i_d__desc_2pgmstrings_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/_p_s3_b_t_8cpp.html b/_p_s3_b_t_8cpp.html index 1b3f1534..21656aeb 100644 --- a/_p_s3_b_t_8cpp.html +++ b/_p_s3_b_t_8cpp.html @@ -99,7 +99,9 @@ Include dependency graph for PS3BT.cpp: - + +

Go to the source code of this file.

+
@@ -122,6 +124,8 @@ OUTPUT_REPORT_BUFFER[] 

Macros

#define DEBUG

Variable Documentation

@@ -146,12 +150,14 @@ OUTPUT_REPORT_BUFFER[] 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}
+

Definition at line 23 of file PS3BT.cpp.

+ diff --git a/_p_s3_b_t_8cpp_source.html b/_p_s3_b_t_8cpp_source.html new file mode 100644 index 00000000..1442adf1 --- /dev/null +++ b/_p_s3_b_t_8cpp_source.html @@ -0,0 +1,756 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/PS3BT.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
PS3BT.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
+
2 
+
3  This software may be distributed and modified under the terms of the GNU
+
4  General Public License version 2 (GPL2) as published by the Free Software
+
5  Foundation and appearing in the file GPL2.TXT included in the packaging of
+
6  this file. Please note that GPL2 Section 2[b] requires that all works based
+
7  on this software must also be made publicly available under the terms of
+
8  the GPL2 ("Copyleft").
+
9 
+
10  Contact information
+
11  -------------------
+
12 
+
13  Kristian Lauszus, TKJ Electronics
+
14  Web : http://www.tkjelectronics.com
+
15  e-mail : kristianl@tkjelectronics.com
+
16  */
+
17 
+
18 #include "PS3BT.h"
+
19 #define DEBUG // Uncomment to print data for debugging
+
20 //#define EXTRADEBUG // Uncomment to get even more debugging data
+
21 //#define PRINTREPORT // Uncomment to print the report send by the PS3 Controllers
+
22 
+
23 const uint8_t OUTPUT_REPORT_BUFFER[] PROGMEM = {
+
24  0x00, 0x00, 0x00, 0x00, 0x00,
+
25  0x00, 0x00, 0x00, 0x00, 0x00,
+
26  0xff, 0x27, 0x10, 0x00, 0x32,
+
27  0xff, 0x27, 0x10, 0x00, 0x32,
+
28  0xff, 0x27, 0x10, 0x00, 0x32,
+
29  0xff, 0x27, 0x10, 0x00, 0x32,
+
30  0x00, 0x00, 0x00, 0x00, 0x00,
+
31  0x00, 0x00, 0x00, 0x00, 0x00,
+
32  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
33 };
+
34 
+
35 PS3BT::PS3BT(BTD *p, uint8_t btadr5, uint8_t btadr4, uint8_t btadr3, uint8_t btadr2, uint8_t btadr1, uint8_t btadr0):
+
36 pBtd(p) // pointer to USB class instance - mandatory
+
37 {
+
38  if (pBtd)
+
39  pBtd->registerServiceClass(this); // Register it as a Bluetooth service
+
40 
+
41  pBtd->my_bdaddr[5] = btadr5; // Change to your dongle's Bluetooth address instead
+
42  pBtd->my_bdaddr[4] = btadr4;
+
43  pBtd->my_bdaddr[3] = btadr3;
+
44  pBtd->my_bdaddr[2] = btadr2;
+
45  pBtd->my_bdaddr[1] = btadr1;
+
46  pBtd->my_bdaddr[0] = btadr0;
+
47 
+
48  HIDBuffer[0] = 0x52;// HID BT Set_report (0x50) | Report Type (Output 0x02)
+
49  HIDBuffer[1] = 0x01;// Report ID
+
50 
+
51  //Needed for PS3 Move Controller commands to work via bluetooth
+
52  HIDMoveBuffer[0] = 0xA2;// HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
53  HIDMoveBuffer[1] = 0x02;// Report ID
+
54 
+
55  /* Set device cid for the control and intterrupt channelse - LSB */
+
56  control_dcid[0] = 0x40;//0x0040
+
57  control_dcid[1] = 0x00;
+
58  interrupt_dcid[0] = 0x41;//0x0041
+
59  interrupt_dcid[1] = 0x00;
+
60 
+
61  Reset();
+
62 }
+ +
64  return (ButtonState & pgm_read_dword(&BUTTONS[(uint8_t)b]));
+
65 }
+ +
67  uint32_t button = pgm_read_dword(&BUTTONS[(uint8_t)b]);
+
68  bool click = (ButtonClickState & button);
+
69  ButtonClickState &= ~button; // clear "click" event
+
70  return click;
+
71 }
+ +
73  if (l2capinbuf == NULL)
+
74  return 0;
+
75  return (uint8_t)(l2capinbuf[pgm_read_byte(&ANALOGBUTTONS[(uint8_t)a])]);
+
76 }
+ +
78  if (l2capinbuf == NULL)
+
79  return 0;
+
80  return (uint8_t)(l2capinbuf[(uint8_t)a+15]);
+
81 }
+ +
83  if (l2capinbuf == NULL)
+
84  return 0;
+
85  if(PS3Connected) {
+
86  if (a == aX || a == aY || a == aZ || a == gZ)
+
87  return ((l2capinbuf[(uint16_t)a] << 8) | l2capinbuf[(uint16_t)a + 1]);
+
88  else
+
89  return 0;
+
90  } else if(PS3MoveConnected) {
+
91  if (a == mXmove || a == mYmove) // These are all 12-bits long
+
92  return (((l2capinbuf[(uint16_t)a] & 0x0F) << 8) | (l2capinbuf[(uint16_t)a + 1]));
+
93  else if (a == mZmove || a == tempMove) // The tempearature is also 12 bits long
+
94  return ((l2capinbuf[(uint16_t)a] << 4) | ((l2capinbuf[(uint16_t)a + 1] & 0xF0) >> 4));
+
95  else // aXmove, aYmove, aZmove, gXmove, gYmove and gZmove
+
96  return (l2capinbuf[(uint16_t)a] | (l2capinbuf[(uint16_t)a + 1] << 8));
+
97  } else
+
98  return 0;
+
99 }
+ +
101  double accXval;
+
102  double accYval;
+
103  double accZval;
+
104 
+
105  if(PS3Connected) {
+
106  // Data for the Kionix KXPC4 used in the DualShock 3
+
107  const double zeroG = 511.5; // 1.65/3.3*1023 (1,65V)
+
108  accXval = -((double)getSensor(aX)-zeroG);
+
109  accYval = -((double)getSensor(aY)-zeroG);
+
110  accZval = -((double)getSensor(aZ)-zeroG);
+
111  } else if(PS3MoveConnected) {
+
112  // It's a Kionix KXSC4 inside the Motion controller
+
113  const uint16_t zeroG = 0x8000;
+
114  accXval = -(int16_t)(getSensor(aXmove)-zeroG);
+
115  accYval = (int16_t)(getSensor(aYmove)-zeroG);
+
116  accZval = (int16_t)(getSensor(aZmove)-zeroG);
+
117  }
+
118 
+
119  // Convert to 360 degrees resolution
+
120  // atan2 outputs the value of -Ï€ to Ï€ (radians)
+
121  // We are then converting it to 0 to 2Ï€ and then to degrees
+
122  if (a == Pitch) {
+
123  double angle = (atan2(accYval,accZval)+PI)*RAD_TO_DEG;
+
124  return angle;
+
125  } else {
+
126  double angle = (atan2(accXval,accZval)+PI)*RAD_TO_DEG;
+
127  return angle;
+
128  }
+
129 }
+
130 double PS3BT::get9DOFValues(Sensor a) { // Thanks to Manfred Piendl
+
131  if(!PS3MoveConnected)
+
132  return 0;
+
133  int16_t value = getSensor(a);
+
134  if (a == mXmove || a == mYmove || a == mZmove) {
+
135  if (value > 2047)
+
136  value -= 0x1000;
+
137  return (double)value/3.2; // unit: muT = 10^(-6) Tesla
+
138  } else if (a == aXmove || a == aYmove || a == aZmove) {
+
139  if (value < 0)
+
140  value += 0x8000;
+
141  else
+
142  value -= 0x8000;
+
143  return (double)value/442.0; // unit: m/(s^2)
+
144  } else if (a == gXmove || a == gYmove || a == gZmove) {
+
145  if (value < 0)
+
146  value += 0x8000;
+
147  else
+
148  value -= 0x8000;
+
149  if (a == gXmove)
+
150  return (double)value/11.6; // unit: deg/s
+
151  else if (a == gYmove)
+
152  return (double)value/11.2; // unit: deg/s
+
153  else // gZmove
+
154  return (double)value/9.6; // unit: deg/s
+
155  } else
+
156  return 0;
+
157 }
+ +
159  if(PS3MoveConnected) {
+
160  int16_t input = getSensor(tempMove);
+
161 
+
162  String output = String(input/100);
+
163  output += ".";
+
164  if(input%100 < 10)
+
165  output += "0";
+
166  output += String(input%100);
+
167 
+
168  return output;
+
169  }
+
170 }
+ +
172  if (l2capinbuf == NULL)
+
173  return false;
+
174  if (l2capinbuf[(uint16_t)c >> 8] == ((uint8_t)c & 0xff))
+
175  return true;
+
176  return false;
+
177 }
+ + +
180  char statusOutput[100];
+
181 
+
182  strcpy(statusOutput,"ConnectionStatus: ");
+
183 
+
184  if (getStatus(Plugged)) strcat(statusOutput,"Plugged");
+
185  else if (getStatus(Unplugged)) strcat(statusOutput,"Unplugged");
+
186  else strcat(statusOutput,"Error");
+
187 
+
188 
+
189  strcat(statusOutput," - PowerRating: ");
+
190  if (getStatus(Charging)) strcat(statusOutput,"Charging");
+
191  else if (getStatus(NotCharging)) strcat(statusOutput,"Not Charging");
+
192  else if (getStatus(Shutdown)) strcat(statusOutput,"Shutdown");
+
193  else if (getStatus(Dying)) strcat(statusOutput,"Dying");
+
194  else if (getStatus(Low)) strcat(statusOutput,"Low");
+
195  else if (getStatus(High)) strcat(statusOutput,"High");
+
196  else if (getStatus(Full)) strcat(statusOutput,"Full");
+
197  else strcat(statusOutput,"Error");
+
198 
+
199  strcat(statusOutput," - WirelessStatus: ");
+
200 
+
201  if (getStatus(CableRumble)) strcat(statusOutput,"Cable - Rumble is on");
+
202  else if (getStatus(Cable)) strcat(statusOutput,"Cable - Rumble is off");
+
203  else if (getStatus(BluetoothRumble)) strcat(statusOutput,"Bluetooth - Rumble is on");
+
204  else if (getStatus(Bluetooth)) strcat(statusOutput,"Bluetooth - Rumble is off");
+
205  else strcat(statusOutput,"Error");
+
206 
+
207  return statusOutput;
+
208 
+
209  }
+
210  else if(PS3MoveConnected) {
+
211  char statusOutput[50];
+
212 
+
213  strcpy(statusOutput,"PowerRating: ");
+
214 
+
215  if (getStatus(MoveCharging)) strcat(statusOutput,"Charging");
+
216  else if (getStatus(MoveNotCharging)) strcat(statusOutput,"Not Charging");
+
217  else if (getStatus(MoveShutdown)) strcat(statusOutput,"Shutdown");
+
218  else if (getStatus(MoveDying)) strcat(statusOutput,"Dying");
+
219  else if (getStatus(MoveLow)) strcat(statusOutput,"Low");
+
220  else if (getStatus(MoveHigh)) strcat(statusOutput,"High");
+
221  else if (getStatus(MoveFull)) strcat(statusOutput,"Full");
+
222  else strcat(statusOutput,"Error");
+
223 
+
224  return statusOutput;
+
225  }
+
226 }
+
227 void PS3BT::Reset() {
+
228  PS3Connected = false;
+
229  PS3MoveConnected = false;
+
230  PS3NavigationConnected = false;
+
231  activeConnection = false;
+
232  l2cap_event_flag = 0; // Reset flags
+
233  l2cap_state = L2CAP_WAIT;
+
234 
+
235  // Needed for PS3 Dualshock Controller commands to work via bluetooth
+
236  for (uint8_t i = 0; i < OUTPUT_REPORT_BUFFER_SIZE; i++)
+
237  HIDBuffer[i + 2] = pgm_read_byte(&OUTPUT_REPORT_BUFFER[i]); // First two bytes reserved for report type and ID
+
238 }
+
239 
+
240 void PS3BT::disconnect() { // Use this void to disconnect any of the controllers
+
241  //First the HID interrupt channel has to be disconencted, then the HID control channel and finally the HCI connection
+
242  pBtd->l2cap_disconnection_request(hci_handle,0x0A, interrupt_scid, interrupt_dcid);
+
243  Reset();
+
244  l2cap_state = L2CAP_INTERRUPT_DISCONNECT;
+
245 }
+
246 
+
247 void PS3BT::ACLData(uint8_t* ACLData) {
+
248  if(!pBtd->l2capConnectionClaimed && !PS3Connected && !PS3MoveConnected && !PS3NavigationConnected && !activeConnection && !pBtd->connectToWii && !pBtd->incomingWii && !pBtd->pairWithWii) {
+
249  if (ACLData[8] == L2CAP_CMD_CONNECTION_REQUEST) {
+
250  if((ACLData[12] | (ACLData[13] << 8)) == HID_CTRL_PSM) {
+
251  pBtd->l2capConnectionClaimed = true; // Claim that the incoming connection belongs to this service
+
252  activeConnection = true;
+
253  hci_handle = pBtd->hci_handle; // Store the HCI Handle for the connection
+
254  l2cap_state = L2CAP_WAIT;
+
255  for(uint8_t i = 0; i < 30; i++)
+
256  remote_name[i] = pBtd->remote_name[i]; // Store the remote name for the connection
+
257 #ifdef DEBUG
+
258  if(pBtd->hci_version < 3) { // Check the HCI Version of the Bluetooth dongle
+
259  Notify(PSTR("\r\nYour dongle may not support reading the analog buttons, sensors and status\r\nYour HCI Version is: "));
+
260  Serial.print(pBtd->hci_version);
+
261  Notify(PSTR("\r\nBut should be at least 3\r\nThis means that it doesn't support Bluetooth Version 2.0+EDR"));
+
262  }
+
263 #endif
+
264  }
+
265  }
+
266  }
+
267  if (((ACLData[0] | (ACLData[1] << 8)) == (hci_handle | 0x2000))) { //acl_handle_ok
+
268  for(uint8_t i = 0; i < BULK_MAXPKTSIZE; i++)
+
269  l2capinbuf[i] = ACLData[i];
+
270  if ((l2capinbuf[6] | (l2capinbuf[7] << 8)) == 0x0001) { //l2cap_control - Channel ID for ACL-U
+
271  if (l2capinbuf[8] == L2CAP_CMD_COMMAND_REJECT) {
+
272 #ifdef DEBUG
+
273  Notify(PSTR("\r\nL2CAP Command Rejected - Reason: "));
+
274  PrintHex<uint8_t>(l2capinbuf[13]);
+
275  Serial.print(" ");
+
276  PrintHex<uint8_t>(l2capinbuf[12]);
+
277  Serial.print(" Data: ");
+
278  PrintHex<uint8_t>(l2capinbuf[17]);
+
279  Serial.print(" ");
+
280  PrintHex<uint8_t>(l2capinbuf[16]);
+
281  Serial.print(" ");
+
282  PrintHex<uint8_t>(l2capinbuf[15]);
+
283  Serial.print(" ");
+
284  PrintHex<uint8_t>(l2capinbuf[14]);
+
285 #endif
+
286  }
+
287  else if (l2capinbuf[8] == L2CAP_CMD_CONNECTION_REQUEST) {
+
288 #ifdef EXTRADEBUG
+
289  Notify(PSTR("\r\nL2CAP Connection Request - PSM: "));
+
290  PrintHex<uint8_t>(l2capinbuf[13]);
+
291  Notify(PSTR(" "));
+
292  PrintHex<uint8_t>(l2capinbuf[12]);
+
293  Notify(PSTR(" SCID: "));
+
294  PrintHex<uint8_t>(l2capinbuf[15]);
+
295  Notify(PSTR(" "));
+
296  PrintHex<uint8_t>(l2capinbuf[14]);
+
297  Notify(PSTR(" Identifier: "));
+
298  PrintHex<uint8_t>(l2capinbuf[9]);
+
299 #endif
+
300  if ((l2capinbuf[12] | (l2capinbuf[13] << 8)) == HID_CTRL_PSM) {
+
301  identifier = l2capinbuf[9];
+
302  control_scid[0] = l2capinbuf[14];
+
303  control_scid[1] = l2capinbuf[15];
+
304  l2cap_event_flag |= L2CAP_FLAG_CONNECTION_CONTROL_REQUEST;
+
305  }
+
306  else if ((l2capinbuf[12] | (l2capinbuf[13] << 8)) == HID_INTR_PSM) {
+
307  identifier = l2capinbuf[9];
+
308  interrupt_scid[0] = l2capinbuf[14];
+
309  interrupt_scid[1] = l2capinbuf[15];
+
310  l2cap_event_flag |= L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST;
+
311  }
+
312  }
+
313  else if (l2capinbuf[8] == L2CAP_CMD_CONFIG_RESPONSE) {
+
314  if ((l2capinbuf[16] | (l2capinbuf[17] << 8)) == 0x0000) { // Success
+
315  if (l2capinbuf[12] == control_dcid[0] && l2capinbuf[13] == control_dcid[1]) {
+
316  //Serial.print("\r\nHID Control Configuration Complete");
+
317  l2cap_event_flag |= L2CAP_FLAG_CONFIG_CONTROL_SUCCESS;
+
318  }
+
319  else if (l2capinbuf[12] == interrupt_dcid[0] && l2capinbuf[13] == interrupt_dcid[1]) {
+
320  //Serial.print("\r\nHID Interrupt Configuration Complete");
+
321  l2cap_event_flag |= L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS;
+
322  }
+
323  }
+
324  }
+
325  else if (l2capinbuf[8] == L2CAP_CMD_CONFIG_REQUEST) {
+
326  if (l2capinbuf[12] == control_dcid[0] && l2capinbuf[13] == control_dcid[1]) {
+
327  //Serial.print("\r\nHID Control Configuration Request");
+
328  identifier = l2capinbuf[9];
+
329  l2cap_event_flag |= L2CAP_FLAG_CONFIG_CONTROL_REQUEST;
+
330  }
+
331  else if (l2capinbuf[12] == interrupt_dcid[0] && l2capinbuf[13] == interrupt_dcid[1]) {
+
332  //Serial.print("\r\nHID Interrupt Configuration Request");
+
333  identifier = l2capinbuf[9];
+
334  l2cap_event_flag |= L2CAP_FLAG_CONFIG_INTERRUPT_REQUEST;
+
335  }
+
336  }
+
337  else if (l2capinbuf[8] == L2CAP_CMD_DISCONNECT_REQUEST) {
+
338  if (l2capinbuf[12] == control_dcid[0] && l2capinbuf[13] == control_dcid[1]) {
+
339 #ifdef DEBUG
+
340  Notify(PSTR("\r\nDisconnect Request: Control Channel"));
+
341 #endif
+
342  identifier = l2capinbuf[9];
+
343  pBtd->l2cap_disconnection_response(hci_handle,identifier,control_dcid,control_scid);
+
344  Reset();
+
345  }
+
346  else if (l2capinbuf[12] == interrupt_dcid[0] && l2capinbuf[13] == interrupt_dcid[1]) {
+
347 #ifdef DEBUG
+
348  Notify(PSTR("\r\nDisconnect Request: Interrupt Channel"));
+
349 #endif
+
350  identifier = l2capinbuf[9];
+
351  pBtd->l2cap_disconnection_response(hci_handle,identifier,interrupt_dcid,interrupt_scid);
+
352  Reset();
+
353  }
+
354  }
+
355  else if (l2capinbuf[8] == L2CAP_CMD_DISCONNECT_RESPONSE) {
+
356  if (l2capinbuf[12] == control_scid[0] && l2capinbuf[13] == control_scid[1]) {
+
357  //Serial.print("\r\nDisconnect Response: Control Channel");
+
358  identifier = l2capinbuf[9];
+
359  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE;
+
360  }
+
361  else if (l2capinbuf[12] == interrupt_scid[0] && l2capinbuf[13] == interrupt_scid[1]) {
+
362  //Serial.print("\r\nDisconnect Response: Interrupt Channel");
+
363  identifier = l2capinbuf[9];
+
364  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE;
+
365  }
+
366  }
+
367 #ifdef EXTRADEBUG
+
368  else {
+
369  Notify(PSTR("\r\nL2CAP Unknown Signaling Command: "));
+
370  PrintHex<uint8_t>(l2capinbuf[8]);
+
371  }
+
372 #endif
+
373  } else if (l2capinbuf[6] == interrupt_dcid[0] && l2capinbuf[7] == interrupt_dcid[1]) { // l2cap_interrupt
+
374  //Serial.print("\r\nL2CAP Interrupt");
+ +
376  /* Read Report */
+
377  if(l2capinbuf[8] == 0xA1) { // HID_THDR_DATA_INPUT
+ +
379  ButtonState = (uint32_t)(l2capinbuf[11] | ((uint16_t)l2capinbuf[12] << 8) | ((uint32_t)l2capinbuf[13] << 16));
+
380  else if(PS3MoveConnected)
+
381  ButtonState = (uint32_t)(l2capinbuf[10] | ((uint16_t)l2capinbuf[11] << 8) | ((uint32_t)l2capinbuf[12] << 16));
+
382 
+
383  //Notify(PSTR("\r\nButtonState");
+
384  //PrintHex<uint32_t>(ButtonState);
+
385 
+
386  if(ButtonState != OldButtonState) {
+
387  ButtonClickState = ButtonState & ~OldButtonState; // Update click state variable
+
388  OldButtonState = ButtonState;
+
389  }
+
390 
+
391 #ifdef PRINTREPORT // Uncomment "#define PRINTREPORT" to print the report send by the PS3 Controllers
+
392  for(uint8_t i = 10; i < 58;i++) {
+
393  PrintHex<uint8_t>(l2capinbuf[i]);
+
394  Serial.print(" ");
+
395  }
+
396  Serial.println();
+
397 #endif
+
398  }
+
399  }
+
400  }
+
401  L2CAP_task();
+
402  }
+
403 }
+
404 void PS3BT::L2CAP_task() {
+
405  switch (l2cap_state) {
+
406  case L2CAP_WAIT:
+ +
408 #ifdef DEBUG
+
409  Notify(PSTR("\r\nHID Control Incoming Connection Request"));
+
410 #endif
+
411  pBtd->l2cap_connection_response(hci_handle,identifier, control_dcid, control_scid, PENDING);
+
412  delay(1);
+
413  pBtd->l2cap_connection_response(hci_handle,identifier, control_dcid, control_scid, SUCCESSFUL);
+
414  identifier++;
+
415  delay(1);
+
416  pBtd->l2cap_config_request(hci_handle,identifier, control_scid);
+
417  l2cap_state = L2CAP_CONTROL_REQUEST;
+
418  }
+
419  break;
+ + +
422 #ifdef DEBUG
+
423  Notify(PSTR("\r\nHID Control Configuration Request"));
+
424 #endif
+
425  pBtd->l2cap_config_response(hci_handle,identifier, control_scid);
+
426  l2cap_state = L2CAP_CONTROL_SUCCESS;
+
427  }
+
428  break;
+
429 
+ + +
432 #ifdef DEBUG
+
433  Notify(PSTR("\r\nHID Control Successfully Configured"));
+
434 #endif
+
435  l2cap_state = L2CAP_INTERRUPT_SETUP;
+
436  }
+
437  break;
+ + +
440 #ifdef DEBUG
+
441  Notify(PSTR("\r\nHID Interrupt Incoming Connection Request"));
+
442 #endif
+
443  pBtd->l2cap_connection_response(hci_handle,identifier, interrupt_dcid, interrupt_scid, PENDING);
+
444  delay(1);
+
445  pBtd->l2cap_connection_response(hci_handle,identifier, interrupt_dcid, interrupt_scid, SUCCESSFUL);
+
446  identifier++;
+
447  delay(1);
+
448  pBtd->l2cap_config_request(hci_handle,identifier, interrupt_scid);
+
449 
+
450  l2cap_state = L2CAP_INTERRUPT_REQUEST;
+
451  }
+
452  break;
+ + +
455 #ifdef DEBUG
+
456  Notify(PSTR("\r\nHID Interrupt Configuration Request"));
+
457 #endif
+
458  pBtd->l2cap_config_response(hci_handle,identifier, interrupt_scid);
+
459  l2cap_state = L2CAP_INTERRUPT_SUCCESS;
+
460  }
+
461  break;
+ + +
464 #ifdef DEBUG
+
465  Notify(PSTR("\r\nHID Interrupt Successfully Configured"));
+
466 #endif
+
467  if(remote_name[0] == 'M') { // First letter in Motion Controller ('M')
+
468  for (uint8_t i = 0; i < BULK_MAXPKTSIZE; i++) // Reset l2cap in buffer as it sometimes read it as a button has been pressed
+
469  l2capinbuf[i] = 0;
+
470  ButtonState = 0;
+
471  OldButtonState = 0;
+
472 
+
473  l2cap_state = L2CAP_HID_PS3_LED;
+
474  } else
+
475  l2cap_state = L2CAP_HID_ENABLE_SIXAXIS;
+
476  timer = millis();
+
477  }
+
478  break;
+
479 
+
480  /* These states are handled in Run() */
+
481 
+ + +
484 #ifdef DEBUG
+
485  Notify(PSTR("\r\nDisconnected Interrupt Channel"));
+
486 #endif
+
487  identifier++;
+
488  pBtd->l2cap_disconnection_request(hci_handle, identifier, control_scid, control_dcid);
+
489  l2cap_state = L2CAP_CONTROL_DISCONNECT;
+
490  }
+
491  break;
+
492 
+ + +
495 #ifdef DEBUG
+
496  Notify(PSTR("\r\nDisconnected Control Channel"));
+
497 #endif
+
498  pBtd->hci_disconnect(hci_handle);
+
499  hci_handle = -1; // Reset handle
+
500  l2cap_event_flag = 0; // Reset flags
+
501  l2cap_state = L2CAP_WAIT;
+
502  }
+
503  break;
+
504  }
+
505 }
+
506 void PS3BT::Run() {
+
507  switch (l2cap_state) {
+ +
509  if(millis() - timer > 1000) { // loop 1 second before sending the command
+
510  for (uint8_t i = 0; i < BULK_MAXPKTSIZE; i++) // Reset l2cap in buffer as it sometimes read it as a button has been pressed
+
511  l2capinbuf[i] = 0;
+
512  ButtonState = 0;
+
513  OldButtonState = 0;
+
514 
+
515  enable_sixaxis();
+
516  for (uint8_t i = 15; i < 19; i++)
+
517  l2capinbuf[i] = 0x7F; // Set the analog joystick values to center position
+
518  l2cap_state = L2CAP_HID_PS3_LED;
+
519  timer = millis();
+
520  }
+
521  break;
+
522 
+
523  case L2CAP_HID_PS3_LED:
+
524  if(millis() - timer > 1000) { // loop 1 second before sending the command
+
525  if (remote_name[0] == 'P') { // First letter in PLAYSTATION(R)3 Controller ('P')
+
526  setLedOn(LED1);
+
527 #ifdef DEBUG
+
528  Notify(PSTR("\r\nDualshock 3 Controller Enabled\r\n"));
+
529 #endif
+
530  PS3Connected = true;
+
531  } else if (remote_name[0] == 'N') { // First letter in Navigation Controller ('N')
+
532  setLedOn(LED1); // This just turns LED constantly on, on the Navigation controller
+
533 #ifdef DEBUG
+
534  Notify(PSTR("\r\nNavigation Controller Enabled\r\n"));
+
535 #endif
+
536  PS3NavigationConnected = true;
+
537  } else if(remote_name[0] == 'M') { // First letter in Motion Controller ('M')
+
538  moveSetBulb(Red);
+
539  timerBulbRumble = millis();
+
540 #ifdef DEBUG
+
541  Notify(PSTR("\r\nMotion Controller Enabled\r\n"));
+
542 #endif
+
543  PS3MoveConnected = true;
+
544  }
+
545  l2cap_state = L2CAP_DONE;
+
546  }
+
547  break;
+
548 
+
549  case L2CAP_DONE:
+
550  if (PS3MoveConnected) { //The Bulb and rumble values, has to be send at aproximatly every 5th second for it to stay on
+
551  if (millis() - timerBulbRumble > 4000) { //Send at least every 4th second
+
552  HIDMove_Command(HIDMoveBuffer, HID_BUFFERSIZE);//The Bulb and rumble values, has to be written again and again, for it to stay turned on
+
553  timerBulbRumble = millis();
+
554  }
+
555  }
+
556  break;
+
557  }
+
558 }
+
559 
+
560 /************************************************************/
+
561 /* HID Commands */
+
562 /************************************************************/
+
563 
+
564 //Playstation Sixaxis Dualshock and Navigation Controller commands
+
565 void PS3BT::HID_Command(uint8_t* data, uint8_t nbytes) {
+
566  if (millis() - timerHID <= 250)// Check if is has been more than 250ms since last command
+
567  delay((uint32_t)(250 - (millis() - timerHID)));//There have to be a delay between commands
+
568  pBtd->L2CAP_Command(hci_handle,data,nbytes,control_scid[0],control_scid[1]); // Both the Navigation and Dualshock controller sends data via the control channel
+
569  timerHID = millis();
+
570 }
+ +
572  for (uint8_t i = 0; i < OUTPUT_REPORT_BUFFER_SIZE; i++)
+
573  HIDBuffer[i + 2] = pgm_read_byte(&OUTPUT_REPORT_BUFFER[i]);//First two bytes reserved for report type and ID
+
574 
+
575  HID_Command(HIDBuffer, HID_BUFFERSIZE);
+
576 }
+ +
578  HIDBuffer[3] = 0x00;
+
579  HIDBuffer[4] = 0x00;//low mode off
+
580  HIDBuffer[5] = 0x00;
+
581  HIDBuffer[6] = 0x00;//high mode off
+
582 
+
583  HID_Command(HIDBuffer, HID_BUFFERSIZE);
+
584 }
+ +
586  /* Still not totally sure how it works, maybe something like this instead?
+
587  * 3 - duration_right
+
588  * 4 - power_right
+
589  * 5 - duration_left
+
590  * 6 - power_left
+
591  */
+
592  if ((mode & 0x30) > 0) {
+
593  HIDBuffer[3] = 0xfe;
+
594  HIDBuffer[5] = 0xfe;
+
595  if (mode == RumbleHigh) {
+
596  HIDBuffer[4] = 0;//low mode off
+
597  HIDBuffer[6] = 0xff;//high mode on
+
598  }
+
599  else {
+
600  HIDBuffer[4] = 0xff;//low mode on
+
601  HIDBuffer[6] = 0;//high mode off
+
602  }
+
603  HID_Command(HIDBuffer, HID_BUFFERSIZE);
+
604  }
+
605 }
+ +
607  HIDBuffer[11] &= ~((uint8_t)((pgm_read_byte(&LEDS[(uint8_t)a]) & 0x0f) << 1));
+
608  HID_Command(HIDBuffer, HID_BUFFERSIZE);
+
609 }
+ +
611  HIDBuffer[11] |= (uint8_t)((pgm_read_byte(&LEDS[(uint8_t)a]) & 0x0f) << 1);
+
612  HID_Command(HIDBuffer, HID_BUFFERSIZE);
+
613 }
+ +
615  HIDBuffer[11] ^= (uint8_t)((pgm_read_byte(&LEDS[(uint8_t)a]) & 0x0f) << 1);
+
616  HID_Command(HIDBuffer, HID_BUFFERSIZE);
+
617 }
+
618 void PS3BT::enable_sixaxis() { //Command used to enable the Dualshock 3 and Navigation controller to send data via USB
+
619  uint8_t cmd_buf[6];
+
620  cmd_buf[0] = 0x53;// HID BT Set_report (0x50) | Report Type (Feature 0x03)
+
621  cmd_buf[1] = 0xF4;// Report ID
+
622  cmd_buf[2] = 0x42;// Special PS3 Controller enable commands
+
623  cmd_buf[3] = 0x03;
+
624  cmd_buf[4] = 0x00;
+
625  cmd_buf[5] = 0x00;
+
626 
+
627  HID_Command(cmd_buf, 6);
+
628 }
+
629 
+
630 //Playstation Move Controller commands
+
631 void PS3BT::HIDMove_Command(uint8_t* data,uint8_t nbytes) {
+
632  if (millis() - timerHID <= 250)// Check if is has been less than 200ms since last command
+
633  delay((uint32_t)(250 - (millis() - timerHID)));//There have to be a delay between commands
+
634  pBtd->L2CAP_Command(hci_handle,data,nbytes,interrupt_scid[0],interrupt_scid[1]); // The Move controller sends it's data via the intterrupt channel
+
635  timerHID = millis();
+
636 }
+
637 void PS3BT::moveSetBulb(uint8_t r, uint8_t g, uint8_t b) { //Use this to set the Color using RGB values
+
638  //set the Bulb's values into the write buffer
+
639  HIDMoveBuffer[3] = r;
+
640  HIDMoveBuffer[4] = g;
+
641  HIDMoveBuffer[5] = b;
+
642 
+
643  HIDMove_Command(HIDMoveBuffer, HID_BUFFERSIZE);
+
644 }
+
645 void PS3BT::moveSetBulb(Colors color) { //Use this to set the Color using the predefined colors in enum
+
646  moveSetBulb((uint8_t)(color >> 16),(uint8_t)(color >> 8),(uint8_t)(color));
+
647 }
+
648 void PS3BT::moveSetRumble(uint8_t rumble) {
+
649 #ifdef DEBUG
+
650  if(rumble < 64 && rumble != 0) // The rumble value has to at least 64, or approximately 25% (64/255*100)
+
651  Notify(PSTR("\r\nThe rumble value has to at least 64, or approximately 25%"));
+
652 #endif
+
653  //set the rumble value into the write buffer
+
654  HIDMoveBuffer[7] = rumble;
+
655 
+
656  HIDMove_Command(HIDMoveBuffer, HID_BUFFERSIZE);
+
657 }
+
+ + + + diff --git a/_p_s3_b_t_8h.html b/_p_s3_b_t_8h.html index fe67f373..338b0c40 100644 --- a/_p_s3_b_t_8h.html +++ b/_p_s3_b_t_8h.html @@ -187,6 +187,8 @@ Macros
+

Definition at line 24 of file PS3BT.h.

+
@@ -199,6 +201,8 @@ Macros
+

Definition at line 52 of file PS3BT.h.

+
@@ -211,6 +215,8 @@ Macros
+

Definition at line 55 of file PS3BT.h.

+
@@ -223,6 +229,8 @@ Macros
+

Definition at line 53 of file PS3BT.h.

+
@@ -235,6 +243,8 @@ Macros
+

Definition at line 56 of file PS3BT.h.

+
@@ -247,6 +257,8 @@ Macros
+

Definition at line 51 of file PS3BT.h.

+
@@ -259,6 +271,8 @@ Macros
+

Definition at line 54 of file PS3BT.h.

+
@@ -271,6 +285,8 @@ Macros
+

Definition at line 38 of file PS3BT.h.

+
@@ -283,6 +299,8 @@ Macros
+

Definition at line 29 of file PS3BT.h.

+
@@ -295,6 +313,8 @@ Macros
+

Definition at line 30 of file PS3BT.h.

+
@@ -307,6 +327,8 @@ Macros
+

Definition at line 57 of file PS3BT.h.

+
@@ -319,6 +341,8 @@ Macros
+

Definition at line 58 of file PS3BT.h.

+
@@ -331,6 +355,8 @@ Macros
+

Definition at line 36 of file PS3BT.h.

+
@@ -343,6 +369,8 @@ Macros
+

Definition at line 42 of file PS3BT.h.

+
@@ -355,6 +383,8 @@ Macros
+

Definition at line 43 of file PS3BT.h.

+
@@ -367,6 +397,8 @@ Macros
+

Definition at line 45 of file PS3BT.h.

+
@@ -379,6 +411,8 @@ Macros
+

Definition at line 46 of file PS3BT.h.

+
@@ -391,6 +425,8 @@ Macros
+

Definition at line 41 of file PS3BT.h.

+
@@ -403,6 +439,8 @@ Macros
+

Definition at line 44 of file PS3BT.h.

+
@@ -415,6 +453,8 @@ Macros
+

Definition at line 47 of file PS3BT.h.

+
@@ -427,6 +467,8 @@ Macros
+

Definition at line 48 of file PS3BT.h.

+
@@ -439,6 +481,8 @@ Macros
+

Definition at line 34 of file PS3BT.h.

+
@@ -451,6 +495,8 @@ Macros
+

Definition at line 35 of file PS3BT.h.

+
@@ -463,6 +509,8 @@ Macros
+

Definition at line 37 of file PS3BT.h.

+
@@ -475,6 +523,8 @@ Macros
+

Definition at line 32 of file PS3BT.h.

+
@@ -487,6 +537,8 @@ Macros
+

Definition at line 31 of file PS3BT.h.

+
@@ -499,6 +551,8 @@ Macros
+

Definition at line 33 of file PS3BT.h.

+
@@ -511,6 +565,8 @@ Macros
+

Definition at line 28 of file PS3BT.h.

+
@@ -523,12 +579,14 @@ Macros
+

Definition at line 25 of file PS3BT.h.

+
diff --git a/_p_s3_b_t_8h_source.html b/_p_s3_b_t_8h_source.html index 63f6f1d6..b2ff9caf 100644 --- a/_p_s3_b_t_8h_source.html +++ b/_p_s3_b_t_8h_source.html @@ -147,98 +147,84 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
57 #define l2cap_disconnect_response_control_flag (l2cap_event_flag & L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE)
58 #define l2cap_disconnect_response_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE)
59 
-
60 class PS3BT : public BluetoothService {
-
61 public:
-
62  PS3BT(BTD *pBtd, uint8_t btadr5=0, uint8_t btadr4=0, uint8_t btadr3=0, uint8_t btadr2=0, uint8_t btadr1=0, uint8_t btadr0=0);
-
63 
-
64  // BluetoothService implementation
-
65  virtual void ACLData(uint8_t* ACLData); // Used to pass acldata to the services
-
66  virtual void Run(); // Used to run part of the state maschine
-
67  virtual void Reset(); // Use this to reset the service
-
68  virtual void disconnect(); // Use this void to disconnect any of the controllers
-
69 
-
70  /* PS3 Controller Commands */
-
71  /*
-
72  getButtonPress will return true as long as the button is held down
-
73  While getButtonClick will only return it once
-
74  So you instance if you need to increase a variable once you would use getButtonClick,
-
75  but if you need to drive a robot forward you would use getButtonPress
-
76  */
-
77  bool getButtonPress(Button b);
-
78  bool getButtonClick(Button b);
-
79 
-
80  uint8_t getAnalogButton(Button a);
-
81  uint8_t getAnalogHat(AnalogHat a);
-
82  int16_t getSensor(Sensor a);
-
83  double getAngle(Angle a);
-
84  double get9DOFValues(Sensor a);
-
85  bool getStatus(Status c);
-
86  String getStatusString();
-
87  String getTemperature();
-
88 
-
89  /* HID Commands */
-
90  /* Commands for Dualshock 3 and Navigation controller */
-
91  void setAllOff();
-
92  void setRumbleOff();
-
93  void setRumbleOn(Rumble mode);
-
94  void setLedOff(LED a);
-
95  void setLedOn(LED a);
-
96  void setLedToggle(LED a);
-
97 
-
98  /* Commands for Motion controller only */
-
99  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b); // Use this to set the Color using RGB values
-
100  void moveSetBulb(Colors color); // Use this to set the Color using the predefined colors in "enum Colors"
-
101  void moveSetRumble(uint8_t rumble);
-
102 
-
103  bool PS3Connected; // Variable used to indicate if the normal playstation controller is successfully connected
-
104  bool PS3MoveConnected; // Variable used to indicate if the move controller is successfully connected
-
105  bool PS3NavigationConnected; // Variable used to indicate if the navigation controller is successfully connected
-
106 
-
107 private:
-
108  /* mandatory members */
-
109  BTD *pBtd;
-
110 
-
111  void L2CAP_task(); // L2CAP state machine
-
112 
-
113  /* Variables filled from HCI event management */
-
114  int16_t hci_handle;
-
115  uint8_t remote_name[30]; // First 30 chars of remote name
-
116  bool activeConnection; // Used to indicate if it's already has established a connection
-
117 
-
118  /* variables used by high level L2CAP task */
-
119  uint8_t l2cap_state;
-
120  uint16_t l2cap_event_flag; // L2CAP flags of received bluetooth events
-
121 
-
122  unsigned long timer;
-
123 
-
124  uint32_t ButtonState;
-
125  uint32_t OldButtonState;
-
126  uint32_t ButtonClickState;
-
127 
-
128  uint32_t timerHID; // Timer used see if there has to be a delay before a new HID command
-
129  uint32_t timerBulbRumble;// used to continuously set PS3 Move controller Bulb and rumble values
-
130 
-
131  uint8_t l2capinbuf[BULK_MAXPKTSIZE]; // General purpose buffer for L2CAP in data
-
132  uint8_t HIDBuffer[HID_BUFFERSIZE]; // Used to store HID commands
-
133  uint8_t HIDMoveBuffer[HID_BUFFERSIZE]; // Used to store HID commands for the Move controller
-
134 
-
135  /* L2CAP Channels */
-
136  uint8_t control_scid[2]; // L2CAP source CID for HID_Control
-
137  uint8_t control_dcid[2]; // 0x0040
-
138  uint8_t interrupt_scid[2]; // L2CAP source CID for HID_Interrupt
-
139  uint8_t interrupt_dcid[2]; // 0x0041
-
140  uint8_t identifier; // Identifier for connection
-
141 
-
142  /* HID Commands */
-
143  void HID_Command(uint8_t* data, uint8_t nbytes);
-
144  void HIDMove_Command(uint8_t* data, uint8_t nbytes);
-
145  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via Bluetooth
-
146 };
-
147 #endif
+
66 class PS3BT : public BluetoothService {
+
67 public:
+
75  PS3BT(BTD *pBtd, uint8_t btadr5=0, uint8_t btadr4=0, uint8_t btadr3=0, uint8_t btadr2=0, uint8_t btadr1=0, uint8_t btadr0=0);
+
76 
+
82  virtual void ACLData(uint8_t* ACLData);
+
84  virtual void Run();
+
86  virtual void Reset();
+
88  virtual void disconnect();
+
98  bool getButtonPress(Button b);
+
99  bool getButtonClick(Button b);
+
110  uint8_t getAnalogButton(Button a);
+
116  uint8_t getAnalogHat(AnalogHat a);
+
125  int16_t getSensor(Sensor a);
+
131  double getAngle(Angle a);
+
137  double get9DOFValues(Sensor a);
+
143  bool getStatus(Status c);
+
148  String getStatusString();
+
153  String getTemperature();
+
154 
+
156  void setAllOff();
+
158  void setRumbleOff();
+
163  void setRumbleOn(Rumble mode);
+
168  void setLedOff(LED a);
+
173  void setLedOn(LED a);
+
178  void setLedToggle(LED a);
+
179 
+
184  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b);
+
189  void moveSetBulb(Colors color);
+
194  void moveSetRumble(uint8_t rumble);
+
198  bool PS3Connected;
+
200  bool PS3MoveConnected;
+
202  bool PS3NavigationConnected;
+
203 
+
204 private:
+
205  /* mandatory members */
+
206  BTD *pBtd;
+
207 
+
208  void L2CAP_task(); // L2CAP state machine
+
209 
+
210  /* Variables filled from HCI event management */
+
211  int16_t hci_handle;
+
212  uint8_t remote_name[30]; // First 30 chars of remote name
+
213  bool activeConnection; // Used to indicate if it's already has established a connection
+
214 
+
215  /* variables used by high level L2CAP task */
+
216  uint8_t l2cap_state;
+
217  uint16_t l2cap_event_flag; // L2CAP flags of received bluetooth events
+
218 
+
219  unsigned long timer;
+
220 
+
221  uint32_t ButtonState;
+
222  uint32_t OldButtonState;
+
223  uint32_t ButtonClickState;
+
224 
+
225  uint32_t timerHID; // Timer used see if there has to be a delay before a new HID command
+
226  uint32_t timerBulbRumble;// used to continuously set PS3 Move controller Bulb and rumble values
+
227 
+
228  uint8_t l2capinbuf[BULK_MAXPKTSIZE]; // General purpose buffer for L2CAP in data
+
229  uint8_t HIDBuffer[HID_BUFFERSIZE]; // Used to store HID commands
+
230  uint8_t HIDMoveBuffer[HID_BUFFERSIZE]; // Used to store HID commands for the Move controller
+
231 
+
232  /* L2CAP Channels */
+
233  uint8_t control_scid[2]; // L2CAP source CID for HID_Control
+
234  uint8_t control_dcid[2]; // 0x0040
+
235  uint8_t interrupt_scid[2]; // L2CAP source CID for HID_Interrupt
+
236  uint8_t interrupt_dcid[2]; // 0x0041
+
237  uint8_t identifier; // Identifier for connection
+
238 
+
239  /* HID Commands */
+
240  void HID_Command(uint8_t* data, uint8_t nbytes);
+
241  void HIDMove_Command(uint8_t* data, uint8_t nbytes);
+
242  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via Bluetooth
+
243 };
+
244 #endif
diff --git a/_p_s3_enums_8h.html b/_p_s3_enums_8h.html index 73137ac8..3b92cc6e 100644 --- a/_p_s3_enums_8h.html +++ b/_p_s3_enums_8h.html @@ -197,6 +197,7 @@ Variables
+

Used to get the angle calculated using the accelerometer.

@@ -204,6 +205,8 @@ Variables
Enumerator
Pitch 
+

Definition at line 157 of file PS3Enums.h.

+
@@ -215,25 +218,36 @@ Variables
+

Used to set the colors of the move controller.

Enumerator
Red  +

r = 255, g = 0, b = 0

Green  +

r = 0, g = 255, b = 0

Blue  +

r = 0, g = 0, b = 255

Yellow  +

r = 255, g = 235, b = 4

Lightblue  +

r = 0, g = 255, b = 255

Purble  +

r = 255, g = 0, b = 255

White  +

r = 255, g = 255, b = 255

Off  +

r = 0, g = 0, b = 0

+

Definition at line 96 of file PS3Enums.h.

+
@@ -252,6 +266,8 @@ Variables +

Definition at line 188 of file PS3Enums.h.

+ @@ -263,37 +279,55 @@ Variables
+

Sensors inside the Sixaxis Dualshock 3 and Move controller.

+

Note: that the location is shiftet 9 when it's connected via USB.

Enumerator
aX  +

Accelerometer x-axis

aY  +

Accelerometer y-axis

aZ  +

Accelerometer z-axis

gZ  +

Gyro z-axis

aXmove  +

Accelerometer x-axis

aZmove  +

Accelerometer z-axis

aYmove  +

Accelerometer y-axis

gXmove  +

Gyro x-axis

gZmove  +

Gyro z-axis

gYmove  +

Gyro y-axis

tempMove  +

Temperature sensor

mXmove  +

Magnetometer x-axis

mZmove  +

Magnetometer z-axis

mYmove  +

Magnetometer y-axis

+

Definition at line 122 of file PS3Enums.h.

+
@@ -348,6 +382,8 @@ Variables +

Definition at line 161 of file PS3Enums.h.

+

Variable Documentation

@@ -373,13 +409,20 @@ Variables
0x0E,
0x0F
}
- +

Used to set the LEDs on the controllers

+

Buttons on the controllers

+

Note: that the location is shiftet 9 when it's connected via USB.

+

Analog buttons on the controllers

+

Note: that the location is shiftet 9 when it's connected via USB.

+ +

Definition at line 24 of file PS3Enums.h.

+ diff --git a/_p_s3_enums_8h_source.html b/_p_s3_enums_8h_source.html index 9a7c2ffe..96518937 100644 --- a/_p_s3_enums_8h_source.html +++ b/_p_s3_enums_8h_source.html @@ -110,146 +110,141 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
20 
21 #include "controllerEnums.h"
22 
-
23 const uint8_t LEDS[] PROGMEM = {
-
24  0x01, // LED1
-
25  0x02, // LED2
-
26  0x04, // LED3
-
27  0x08, // LED4
-
28 
-
29  0x09, // LED5
-
30  0x0A, // LED6
-
31  0x0C, // LED7
-
32  0x0D, // LED8
-
33  0x0E, // LED9
-
34  0x0F // LED10
-
35 };
-
36 const uint32_t BUTTONS[] PROGMEM = {
-
37  0x10, // UP
-
38  0x20, // RIGHT
-
39  0x40, // DOWN
-
40  0x80, // LEFT
-
41 
-
42  0x01, // SELECT
-
43  0x02, // L3
-
44  0x04, // R3
-
45  0x08, // START
-
46 
-
47  0x0100, // L2
-
48  0x0200, // R2
-
49  0x0400, // L1
-
50  0x0800, // R1
-
51 
-
52  0x1000, // TRIANGLE
-
53  0x2000, // CIRCLE
-
54  0x4000, // CROSS
-
55  0x8000, // SQUARE
-
56 
-
57  0x010000, // PS
-
58  0x080000, // MOVE - covers 12 bits - we only need to read the top 8
-
59  0x100000 // T - covers 12 bits - we only need to read the top 8
-
60 };
-
61 
-
62 const uint8_t ANALOGBUTTONS[] PROGMEM = {
-
63  // Note that the location is shiftet 9 when it's connected via USB
-
64  // Sixaxis Dualshcock 3 & Navigation controller
-
65  23, // UP_ANALOG
-
66  24, // RIGHT_ANALOG
-
67  25, // DOWN_ANALOG
-
68  26, // LEFT_ANALOG
-
69  0,0,0,0, // Skip SELECT, L3, R3 and START
-
70 
-
71  27, // L2_ANALOG
-
72  28, // R2_ANALOG
-
73  29, // L1_ANALOG
-
74  30, // R1_ANALOG
-
75  31, // TRIANGLE_ANALOG
-
76  32, // CIRCLE_ANALOG
-
77  33, // CROSS_ANALOG
-
78  34, // SQUARE_ANALOG
-
79  0,0, // Skip PS and MOVE
+
24 const uint8_t LEDS[] PROGMEM = {
+
25  0x01, // LED1
+
26  0x02, // LED2
+
27  0x04, // LED3
+
28  0x08, // LED4
+
29 
+
30  0x09, // LED5
+
31  0x0A, // LED6
+
32  0x0C, // LED7
+
33  0x0D, // LED8
+
34  0x0E, // LED9
+
35  0x0F // LED10
+
36 };
+
37 
+
43 const uint32_t BUTTONS[] PROGMEM = {
+
44  0x10, // UP
+
45  0x20, // RIGHT
+
46  0x40, // DOWN
+
47  0x80, // LEFT
+
48 
+
49  0x01, // SELECT
+
50  0x08, // START
+
51  0x02, // L3
+
52  0x04, // R3
+
53 
+
54  0x0100, // L2
+
55  0x0200, // R2
+
56  0x0400, // L1
+
57  0x0800, // R1
+
58 
+
59  0x1000, // TRIANGLE
+
60  0x2000, // CIRCLE
+
61  0x4000, // CROSS
+
62  0x8000, // SQUARE
+
63 
+
64  0x010000, // PS
+
65  0x080000, // MOVE - covers 12 bits - we only need to read the top 8
+
66  0x100000 // T - covers 12 bits - we only need to read the top 8
+
67 };
+
68 
+
74 const uint8_t ANALOGBUTTONS[] PROGMEM = {
+
75  23, // UP_ANALOG
+
76  24, // RIGHT_ANALOG
+
77  25, // DOWN_ANALOG
+
78  26, // LEFT_ANALOG
+
79  0,0,0,0, // Skip SELECT, L3, R3 and START
80 
-
81  // Playstation Move Controller
-
82  15 // T_ANALOG - Both at byte 14 (last reading) and byte 15 (current reading)
-
83 };
-
84 
-
85 enum Colors {
-
86  // Used to set the colors of the move controller
-
87  Red = 0xFF0000, // r = 255, g = 0, b = 0
-
88  Green = 0xFF00, // r = 0, g = 255, b = 0
-
89  Blue = 0xFF, // r = 0, g = 0, b = 255
+
81  27, // L2_ANALOG
+
82  28, // R2_ANALOG
+
83  29, // L1_ANALOG
+
84  30, // R1_ANALOG
+
85  31, // TRIANGLE_ANALOG
+
86  32, // CIRCLE_ANALOG
+
87  33, // CROSS_ANALOG
+
88  34, // SQUARE_ANALOG
+
89  0,0, // Skip PS and MOVE
90 
-
91  Yellow = 0xFFEB04, // r = 255, g = 235, b = 4
-
92  Lightblue = 0xFFFF, // r = 0, g = 255, b = 255
-
93  Purble = 0xFF00FF, // r = 255, g = 0, b = 255
-
94 
-
95  White = 0xFFFFFF, // r = 255, g = 255, b = 255
-
96  Off = 0x00, // r = 0, g = 0, b = 0
-
97 };
-
98 enum Sensor {
-
99  // Note that the location is shiftet 9 when it's connected via USB
-
100  // Sensors inside the Sixaxis Dualshock 3 controller
-
101  aX = 50,
-
102  aY = 52,
-
103  aZ = 54,
-
104  gZ = 56,
-
105 
-
106  // Sensors inside the Move Motion controller
-
107  aXmove = 28,
-
108  aZmove = 30,
-
109  aYmove = 32,
+
91  // Playstation Move Controller
+
92  15 // T_ANALOG - Both at byte 14 (last reading) and byte 15 (current reading)
+
93 };
+
94 
+
96 enum Colors {
+
98  Red = 0xFF0000,
+
100  Green = 0xFF00,
+
102  Blue = 0xFF,
+
103 
+
105  Yellow = 0xFFEB04,
+
107  Lightblue = 0xFFFF,
+
109  Purble = 0xFF00FF,
110 
-
111  gXmove = 40,
-
112  gZmove = 42,
-
113  gYmove = 44,
-
114 
-
115  tempMove = 46,
-
116 
-
117  mXmove = 47,
-
118  mZmove = 49,
-
119  mYmove = 50,
-
120 };
-
121 enum Angle {
-
122  // Used to get the angle calculated using atan2
-
123  Pitch = 0x01,
-
124  Roll = 0x02,
-
125 };
-
126 enum Status {
-
127  // Note that the location is shiftet 9 when it's connected via USB
-
128  // Byte location | bit location
-
129  Plugged = (38 << 8) | 0x02,
-
130  Unplugged = (38 << 8) | 0x03,
-
131 
-
132  Charging = (39 << 8) | 0xEE,
-
133  NotCharging = (39 << 8) | 0xF1,
-
134  Shutdown = (39 << 8) | 0x01,
-
135  Dying = (39 << 8) | 0x02,
-
136  Low = (39 << 8) | 0x03,
-
137  High = (39 << 8) | 0x04,
-
138  Full = (39 << 8) | 0x05,
-
139 
-
140  MoveCharging = (21 << 8) | 0xEE,
-
141  MoveNotCharging = (21 << 8) | 0xF1,
-
142  MoveShutdown = (21 << 8) | 0x01,
-
143  MoveDying = (21 << 8) | 0x02,
-
144  MoveLow = (21 << 8) | 0x03,
-
145  MoveHigh = (21 << 8) | 0x04,
-
146  MoveFull = (21 << 8) | 0x05,
-
147 
-
148  CableRumble = (40 << 8) | 0x10,//Opperating by USB and rumble is turned on
-
149  Cable = (40 << 8) | 0x12,//Opperating by USB and rumble is turned off
-
150  BluetoothRumble = (40 << 8) | 0x14,//Opperating by bluetooth and rumble is turned on
-
151  Bluetooth = (40 << 8) | 0x16,//Opperating by bluetooth and rumble is turned off
-
152 };
-
153 enum Rumble {
-
154  RumbleHigh = 0x10,
-
155  RumbleLow = 0x20,
-
156 };
-
157 
-
158 #endif
+
112  White = 0xFFFFFF,
+
114  Off = 0x00,
+
115 };
+
116 
+
122 enum Sensor {
+
124  aX = 50,
+
126  aY = 52,
+
128  aZ = 54,
+
130  gZ = 56,
+
131 
+
133  aXmove = 28,
+
135  aZmove = 30,
+
137  aYmove = 32,
+
138 
+
140  gXmove = 40,
+
142  gZmove = 42,
+
144  gYmove = 44,
+
145 
+
147  tempMove = 46,
+
148 
+
150  mXmove = 47,
+
152  mZmove = 49,
+
154  mYmove = 50,
+
155 };
+
157 enum Angle {
+
158  Pitch = 0x01,
+
159  Roll = 0x02,
+
160 };
+
161 enum Status {
+
162  // Note that the location is shiftet 9 when it's connected via USB
+
163  // Byte location | bit location
+
164  Plugged = (38 << 8) | 0x02,
+
165  Unplugged = (38 << 8) | 0x03,
+
166 
+
167  Charging = (39 << 8) | 0xEE,
+
168  NotCharging = (39 << 8) | 0xF1,
+
169  Shutdown = (39 << 8) | 0x01,
+
170  Dying = (39 << 8) | 0x02,
+
171  Low = (39 << 8) | 0x03,
+
172  High = (39 << 8) | 0x04,
+
173  Full = (39 << 8) | 0x05,
+
174 
+
175  MoveCharging = (21 << 8) | 0xEE,
+
176  MoveNotCharging = (21 << 8) | 0xF1,
+
177  MoveShutdown = (21 << 8) | 0x01,
+
178  MoveDying = (21 << 8) | 0x02,
+
179  MoveLow = (21 << 8) | 0x03,
+
180  MoveHigh = (21 << 8) | 0x04,
+
181  MoveFull = (21 << 8) | 0x05,
+
182 
+
183  CableRumble = (40 << 8) | 0x10,//Opperating by USB and rumble is turned on
+
184  Cable = (40 << 8) | 0x12,//Opperating by USB and rumble is turned off
+
185  BluetoothRumble = (40 << 8) | 0x14,//Opperating by bluetooth and rumble is turned on
+
186  Bluetooth = (40 << 8) | 0x16,//Opperating by bluetooth and rumble is turned off
+
187 };
+
188 enum Rumble {
+
189  RumbleHigh = 0x10,
+
190  RumbleLow = 0x20,
+
191 };
+
192 
+
193 #endif
diff --git a/_p_s3_u_s_b_8cpp.html b/_p_s3_u_s_b_8cpp.html index ece13a49..69fd58d5 100644 --- a/_p_s3_u_s_b_8cpp.html +++ b/_p_s3_u_s_b_8cpp.html @@ -99,7 +99,9 @@ Include dependency graph for PS3USB.cpp: - + +

Go to the source code of this file.

+
@@ -121,6 +123,8 @@ Variables

Macros

#define DEBUG
+

Definition at line 19 of file PS3USB.cpp.

+

Variable Documentation

@@ -145,12 +149,14 @@ Variables
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
}
+

Definition at line 23 of file PS3USB.cpp.

+ diff --git a/_p_s3_u_s_b_8cpp_source.html b/_p_s3_u_s_b_8cpp_source.html new file mode 100644 index 00000000..8e8c0465 --- /dev/null +++ b/_p_s3_u_s_b_8cpp_source.html @@ -0,0 +1,650 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/PS3USB.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
PS3USB.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
+
2 
+
3  This software may be distributed and modified under the terms of the GNU
+
4  General Public License version 2 (GPL2) as published by the Free Software
+
5  Foundation and appearing in the file GPL2.TXT included in the packaging of
+
6  this file. Please note that GPL2 Section 2[b] requires that all works based
+
7  on this software must also be made publicly available under the terms of
+
8  the GPL2 ("Copyleft").
+
9 
+
10  Contact information
+
11  -------------------
+
12 
+
13  Kristian Lauszus, TKJ Electronics
+
14  Web : http://www.tkjelectronics.com
+
15  e-mail : kristianl@tkjelectronics.com
+
16  */
+
17 
+
18 #include "PS3USB.h"
+
19 #define DEBUG // Uncomment to print data for debugging
+
20 //#define EXTRADEBUG // Uncomment to get even more debugging data
+
21 //#define PRINTREPORT // Uncomment to print the report send by the PS3 Controllers
+
22 
+
23 const uint8_t PS3_REPORT_BUFFER[] PROGMEM = {
+
24  0x00, 0x00, 0x00, 0x00, 0x00,
+
25  0x00, 0x00, 0x00, 0x00, 0x00,
+
26  0xff, 0x27, 0x10, 0x00, 0x32,
+
27  0xff, 0x27, 0x10, 0x00, 0x32,
+
28  0xff, 0x27, 0x10, 0x00, 0x32,
+
29  0xff, 0x27, 0x10, 0x00, 0x32,
+
30  0x00, 0x00, 0x00, 0x00, 0x00,
+
31  0x00, 0x00, 0x00, 0x00, 0x00,
+
32  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+
33 };
+
34 const uint8_t MOVE_REPORT_BUFFER[] PROGMEM = {
+
35  0x02, 0x00, // Always 0x02, 0x00,
+
36  0x00, 0x00, 0x00, // r, g, b,
+
37  0x00, // Always 0x00,
+
38  0x00 // Rumble
+
39 };
+
40 
+
41 PS3USB::PS3USB(USB *p, uint8_t btadr5, uint8_t btadr4, uint8_t btadr3, uint8_t btadr2, uint8_t btadr1, uint8_t btadr0):
+
42 pUsb(p), // pointer to USB class instance - mandatory
+
43 bAddress(0), // device address - mandatory
+
44 bPollEnable(false) // don't start polling before dongle is connected
+
45 {
+
46  for(uint8_t i=0; i<PS3_MAX_ENDPOINTS; i++) {
+
47  epInfo[i].epAddr = 0;
+
48  epInfo[i].maxPktSize = (i) ? 0 : 8;
+
49  epInfo[i].epAttribs = 0;
+ +
51  }
+
52 
+
53  if (pUsb) // register in USB subsystem
+
54  pUsb->RegisterDeviceClass(this); //set devConfig[] entry
+
55 
+
56  my_bdaddr[5] = btadr5; // Change to your dongle's Bluetooth address instead
+
57  my_bdaddr[4] = btadr4;
+
58  my_bdaddr[3] = btadr3;
+
59  my_bdaddr[2] = btadr2;
+
60  my_bdaddr[1] = btadr1;
+
61  my_bdaddr[0] = btadr0;
+
62 }
+
63 
+
64 uint8_t PS3USB::Init(uint8_t parent, uint8_t port, bool lowspeed) {
+
65  uint8_t buf[sizeof(USB_DEVICE_DESCRIPTOR)];
+
66  uint8_t rcode;
+
67  UsbDevice *p = NULL;
+
68  EpInfo *oldep_ptr = NULL;
+
69  uint16_t PID;
+
70  uint16_t VID;
+
71 
+
72  // get memory address of USB device address pool
+
73  AddressPool &addrPool = pUsb->GetAddressPool();
+
74 #ifdef EXTRADEBUG
+
75  Notify(PSTR("\r\nPS3USB Init"));
+
76 #endif
+
77  // check if address has already been assigned to an instance
+
78  if (bAddress) {
+
79 #ifdef DEBUG
+
80  Notify(PSTR("\r\nAddress in use"));
+
81 #endif
+ +
83  }
+
84 
+
85  // Get pointer to pseudo device with address 0 assigned
+
86  p = addrPool.GetUsbDevicePtr(0);
+
87 
+
88  if (!p) {
+
89 #ifdef DEBUG
+
90  Notify(PSTR("\r\nAddress not found"));
+
91 #endif
+ +
93  }
+
94 
+
95  if (!p->epinfo) {
+
96 #ifdef DEBUG
+
97  Notify(PSTR("\r\nepinfo is null"));
+
98 #endif
+ +
100  }
+
101 
+
102  // Save old pointer to EP_RECORD of address 0
+
103  oldep_ptr = p->epinfo;
+
104 
+
105  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
+
106  p->epinfo = epInfo;
+
107 
+
108  p->lowspeed = lowspeed;
+
109 
+
110  // Get device descriptor
+
111  rcode = pUsb->getDevDescr(0, 0, sizeof(USB_DEVICE_DESCRIPTOR), (uint8_t*)buf);// Get device descriptor - addr, ep, nbytes, data
+
112  // Restore p->epinfo
+
113  p->epinfo = oldep_ptr;
+
114 
+
115  if(rcode)
+
116  goto FailGetDevDescr;
+
117 
+
118  VID = ((USB_DEVICE_DESCRIPTOR*)buf)->idVendor;
+
119  PID = ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct;
+
120 
+
121  if(VID != PS3_VID || (PID != PS3_PID && PID != PS3NAVIGATION_PID && PID != PS3MOVE_PID))
+
122  goto FailUnknownDevice;
+
123 
+
124  // Allocate new address according to device class
+
125  bAddress = addrPool.AllocAddress(parent, false, port);
+
126 
+
127  if (!bAddress)
+ +
129 
+
130  // Extract Max Packet Size from device descriptor
+
131  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
+
132 
+
133  // Assign new address to the device
+
134  rcode = pUsb->setAddr( 0, 0, bAddress );
+
135  if (rcode) {
+
136  p->lowspeed = false;
+
137  addrPool.FreeAddress(bAddress);
+
138  bAddress = 0;
+
139 #ifdef DEBUG
+
140  Notify(PSTR("\r\nsetAddr: "));
+
141 #endif
+
142  PrintHex<uint8_t>(rcode);
+
143  return rcode;
+
144  }
+
145 #ifdef EXTRADEBUG
+
146  Notify(PSTR("\r\nAddr: "));
+
147  PrintHex<uint8_t>(bAddress);
+
148 #endif
+
149  p->lowspeed = false;
+
150 
+
151  //get pointer to assigned address record
+
152  p = addrPool.GetUsbDevicePtr(bAddress);
+
153  if (!p)
+ +
155 
+
156  p->lowspeed = lowspeed;
+
157 
+
158  // Assign epInfo to epinfo pointer - only EP0 is known
+
159  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
+
160  if (rcode)
+
161  goto FailSetDevTblEntry;
+
162 
+
163 
+
164  /* The application will work in reduced host mode, so we can save program and data
+
165  memory space. After verifying the PID and VID we will use known values for the
+
166  configuration values for device, interface, endpoints and HID for the PS3 Controllers */
+
167 
+
168  /* Initialize data structures for endpoints of device */
+
169  epInfo[ PS3_OUTPUT_PIPE ].epAddr = 0x02; // PS3 output endpoint
+ +
171  epInfo[ PS3_OUTPUT_PIPE ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
+ + + +
175  epInfo[ PS3_INPUT_PIPE ].epAddr = 0x01; // PS3 report endpoint
+ +
177  epInfo[ PS3_INPUT_PIPE ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
+ + + +
181 
+
182  rcode = pUsb->setEpInfoEntry(bAddress, 3, epInfo);
+
183  if( rcode )
+
184  goto FailSetDevTblEntry;
+
185 
+
186  delay(200);//Give time for address change
+
187 
+
188  rcode = pUsb->setConf(bAddress, epInfo[ PS3_CONTROL_PIPE ].epAddr, 1);
+
189  if( rcode )
+
190  goto FailSetConf;
+
191 
+
192  if(PID == PS3_PID || PID == PS3NAVIGATION_PID) {
+
193  if(PID == PS3_PID) {
+
194 #ifdef DEBUG
+
195  Notify(PSTR("\r\nDualshock 3 Controller Connected"));
+
196 #endif
+
197  PS3Connected = true;
+
198  } else { // must be a navigation controller
+
199 #ifdef DEBUG
+
200  Notify(PSTR("\r\nNavigation Controller Connected"));
+
201 #endif
+
202  PS3NavigationConnected = true;
+
203  }
+
204  /* Set internal bluetooth address and request for data */
+
205  setBdaddr(my_bdaddr);
+
206  enable_sixaxis();
+
207  setLedOn(LED1);
+
208 
+
209  // Needed for PS3 Dualshock and Navigation commands to work
+
210  for (uint8_t i = 0; i < PS3_REPORT_BUFFER_SIZE; i++)
+
211  writeBuf[i] = pgm_read_byte(&PS3_REPORT_BUFFER[i]);
+
212 
+
213  for (uint8_t i = 6; i < 10; i++)
+
214  readBuf[i] = 0x7F; // Set the analog joystick values to center position
+
215  }
+
216  else { // must be a Motion controller
+
217 #ifdef DEBUG
+
218  Notify(PSTR("\r\nMotion Controller Connected"));
+
219 #endif
+
220  PS3MoveConnected = true;
+
221  setMoveBdaddr(my_bdaddr); // Set internal bluetooth address
+
222  moveSetBulb(Red);
+
223 
+
224  // Needed for Move commands to work
+
225  for (uint8_t i = 0; i < MOVE_REPORT_BUFFER_SIZE; i++)
+
226  writeBuf[i] = pgm_read_byte(&MOVE_REPORT_BUFFER[i]);
+
227  }
+
228 
+
229  bPollEnable = true;
+
230  Notify(PSTR("\r\n"));
+
231  timer = millis();
+
232  return 0; // successful configuration
+
233 
+
234  /* diagnostic messages */
+
235 FailGetDevDescr:
+
236 #ifdef DEBUG
+
237  Notify(PSTR("\r\ngetDevDescr:"));
+
238 #endif
+
239  goto Fail;
+
240 FailSetDevTblEntry:
+
241 #ifdef DEBUG
+
242  Notify(PSTR("\r\nsetDevTblEn:"));
+
243 #endif
+
244  goto Fail;
+
245 FailSetConf:
+
246 #ifdef DEBUG
+
247  Notify(PSTR("\r\nsetConf:"));
+
248 #endif
+
249  goto Fail;
+
250 FailUnknownDevice:
+
251 #ifdef DEBUG
+
252  Notify(PSTR("\r\nUnknown Device Connected - VID: "));
+
253  PrintHex<uint16_t>(VID);
+
254  Notify(PSTR(" PID: "));
+
255  PrintHex<uint16_t>(PID);
+
256 #endif
+ +
258  goto Fail;
+
259 Fail:
+
260 #ifdef DEBUG
+
261  Notify(PSTR("\r\nPS3 Init Failed, error code: "));
+
262  Serial.print(rcode,HEX);
+
263 #endif
+
264  Release();
+
265  return rcode;
+
266 }
+
267 
+
268 /* Performs a cleanup after failed Init() attempt */
+
269 uint8_t PS3USB::Release() {
+
270  PS3Connected = false;
+
271  PS3MoveConnected = false;
+
272  PS3NavigationConnected = false;
+ +
274  bAddress = 0;
+
275  bPollEnable = false;
+
276  return 0;
+
277 }
+
278 uint8_t PS3USB::Poll() {
+
279  if (!bPollEnable)
+
280  return 0;
+
281 
+ +
283  uint16_t BUFFER_SIZE = EP_MAXPKTSIZE;
+
284  pUsb->inTransfer(bAddress, epInfo[ PS3_INPUT_PIPE ].epAddr, &BUFFER_SIZE, readBuf); // input on endpoint 1
+
285  if(millis() - timer > 100) { // Loop 100ms before processing data
+
286  readReport();
+
287 #ifdef PRINTREPORT
+
288  printReport(); // Uncomment "#define PRINTREPORT" to print the report send by the PS3 Controllers
+
289 #endif
+
290  }
+
291  }
+
292  else if(PS3MoveConnected) { // One can only set the color of the bulb, set the rumble, set and get the bluetooth address and calibrate the magnetometer via USB
+
293  if (millis() - timer > 4000) // Send at least every 4th second
+
294  {
+
295  Move_Command(writeBuf, MOVE_REPORT_BUFFER_SIZE); // The Bulb and rumble values, has to be written again and again, for it to stay turned on
+
296  timer = millis();
+
297  }
+
298  }
+
299  return 0;
+
300 }
+
301 
+
302 void PS3USB::readReport() {
+
303  if (readBuf == NULL)
+
304  return;
+
305 
+
306  ButtonState = (uint32_t)(readBuf[2] | ((uint16_t)readBuf[3] << 8) | ((uint32_t)readBuf[4] << 16));
+
307 
+
308  //Notify(PSTR("\r\nButtonState");
+
309  //PrintHex<uint32_t>(ButtonState);
+
310 
+
311  if(ButtonState != OldButtonState) {
+
312  ButtonClickState = ButtonState & ~OldButtonState; // Update click state variable
+
313  OldButtonState = ButtonState;
+
314  }
+
315 }
+
316 
+
317 void PS3USB::printReport() { //Uncomment "#define PRINTREPORT" to print the report send by the PS3 Controllers
+
318 #ifdef PRINTREPORT
+
319  if (readBuf == NULL)
+
320  return;
+
321  for(uint8_t i = 0; i < PS3_REPORT_BUFFER_SIZE;i++) {
+
322  PrintHex<uint8_t>(readBuf[i]);
+
323  Serial.print(" ");
+
324  }
+
325  Serial.println();
+
326 #endif
+
327 }
+
328 
+ +
330  return (ButtonState & pgm_read_dword(&BUTTONS[(uint8_t)b]));
+
331 }
+ +
333  uint32_t button = pgm_read_dword(&BUTTONS[(uint8_t)b]);
+
334  bool click = (ButtonClickState & button);
+
335  ButtonClickState &= ~button; // clear "click" event
+
336  return click;
+
337 }
+ +
339  if (readBuf == NULL)
+
340  return 0;
+
341  return (uint8_t)(readBuf[(pgm_read_byte(&ANALOGBUTTONS[(uint8_t)a]))-9]);
+
342 }
+ +
344  if (readBuf == NULL)
+
345  return 0;
+
346  return (uint8_t)(readBuf[((uint8_t)a+6)]);
+
347 }
+ +
349  if (readBuf == NULL)
+
350  return 0;
+
351  return ((readBuf[((uint16_t)a)-9] << 8) | readBuf[((uint16_t)a + 1)-9]);
+
352 }
+ +
354  if(PS3Connected) {
+
355  double accXval;
+
356  double accYval;
+
357  double accZval;
+
358 
+
359  // Data for the Kionix KXPC4 used in the DualShock 3
+
360  const double zeroG = 511.5; // 1.65/3.3*1023 (1,65V)
+
361  accXval = -((double)getSensor(aX)-zeroG);
+
362  accYval = -((double)getSensor(aY)-zeroG);
+
363  accZval = -((double)getSensor(aZ)-zeroG);
+
364 
+
365  // Convert to 360 degrees resolution
+
366  // atan2 outputs the value of -Ï€ to Ï€ (radians)
+
367  // We are then converting it to 0 to 2Ï€ and then to degrees
+
368  if (a == Pitch) {
+
369  double angle = (atan2(accYval,accZval)+PI)*RAD_TO_DEG;
+
370  return angle;
+
371  } else {
+
372  double angle = (atan2(accXval,accZval)+PI)*RAD_TO_DEG;
+
373  return angle;
+
374  }
+
375  } else
+
376  return 0;
+
377 }
+ +
379  if (readBuf == NULL)
+
380  return false;
+
381  if (readBuf[((uint16_t)c >> 8)-9] == ((uint8_t)c & 0xff))
+
382  return true;
+
383  return false;
+
384 }
+ + +
387  char statusOutput[100];
+
388 
+
389  strcpy(statusOutput,"ConnectionStatus: ");
+
390 
+
391  if (getStatus(Plugged)) strcat(statusOutput,"Plugged");
+
392  else if (getStatus(Unplugged)) strcat(statusOutput,"Unplugged");
+
393  else strcat(statusOutput,"Error");
+
394 
+
395 
+
396  strcat(statusOutput," - PowerRating: ");
+
397 
+
398  if (getStatus(Charging)) strcat(statusOutput,"Charging");
+
399  else if (getStatus(NotCharging)) strcat(statusOutput,"Not Charging");
+
400  else if (getStatus(Shutdown)) strcat(statusOutput,"Shutdown");
+
401  else if (getStatus(Dying)) strcat(statusOutput,"Dying");
+
402  else if (getStatus(Low)) strcat(statusOutput,"Low");
+
403  else if (getStatus(High)) strcat(statusOutput,"High");
+
404  else if (getStatus(Full)) strcat(statusOutput,"Full");
+
405  else strcat(statusOutput,"Error");
+
406 
+
407  strcat(statusOutput," - WirelessStatus: ");
+
408 
+
409  if (getStatus(CableRumble)) strcat(statusOutput,"Cable - Rumble is on");
+
410  else if (getStatus(Cable)) strcat(statusOutput,"Cable - Rumble is off");
+
411  else if (getStatus(BluetoothRumble)) strcat(statusOutput,"Bluetooth - Rumble is on");
+
412  else if (getStatus(Bluetooth)) strcat(statusOutput,"Bluetooth - Rumble is off");
+
413  else strcat(statusOutput,"Error");
+
414 
+
415  return statusOutput;
+
416  }
+
417 }
+
418 
+
419 /* Playstation Sixaxis Dualshock and Navigation Controller commands */
+
420 void PS3USB::PS3_Command(uint8_t* data, uint16_t nbytes) {
+
421  //bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0x01), Report Type (Output 0x02), interface (0x00), datalength, datalength, data)
+
422  pUsb->ctrlReq(bAddress,epInfo[PS3_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0x01, 0x02, 0x00, nbytes, nbytes, data, NULL);
+
423 }
+ +
425  for (uint8_t i = 0; i < PS3_REPORT_BUFFER_SIZE; i++)
+
426  writeBuf[i] = pgm_read_byte(&PS3_REPORT_BUFFER[i]); // Reset buffer
+
427 
+
428  PS3_Command(writeBuf, PS3_REPORT_BUFFER_SIZE);
+
429 }
+ +
431  writeBuf[1] = 0x00;
+
432  writeBuf[2] = 0x00;//low mode off
+
433  writeBuf[3] = 0x00;
+
434  writeBuf[4] = 0x00;//high mode off
+
435 
+
436  PS3_Command(writeBuf, PS3_REPORT_BUFFER_SIZE);
+
437 }
+ +
439  /* Still not totally sure how it works, maybe something like this instead?
+
440  * 3 - duration_right
+
441  * 4 - power_right
+
442  * 5 - duration_left
+
443  * 6 - power_left
+
444  */
+
445  if ((mode & 0x30) > 0) {
+
446  writeBuf[1] = 0xfe;
+
447  writeBuf[3] = 0xfe;
+
448  if (mode == RumbleHigh) {
+
449  writeBuf[2] = 0;//low mode off
+
450  writeBuf[4] = 0xff;//high mode on
+
451  }
+
452  else {
+
453  writeBuf[2] = 0xff;//low mode on
+
454  writeBuf[4] = 0;//high mode off
+
455  }
+
456  PS3_Command(writeBuf, PS3_REPORT_BUFFER_SIZE);
+
457  }
+
458 }
+ +
460  writeBuf[9] &= ~((uint8_t)((pgm_read_byte(&LEDS[(uint8_t)a]) & 0x0f) << 1));
+
461  PS3_Command(writeBuf, PS3_REPORT_BUFFER_SIZE);
+
462 }
+ +
464  writeBuf[9] |= (uint8_t)((pgm_read_byte(&LEDS[(uint8_t)a]) & 0x0f) << 1);
+
465  PS3_Command(writeBuf, PS3_REPORT_BUFFER_SIZE);
+
466 }
+ +
468  writeBuf[9] ^= (uint8_t)((pgm_read_byte(&LEDS[(uint8_t)a]) & 0x0f) << 1);
+
469  PS3_Command(writeBuf, PS3_REPORT_BUFFER_SIZE);
+
470 }
+
471 void PS3USB::setBdaddr(uint8_t* BDADDR) {
+
472  /* Set the internal bluetooth address */
+
473  uint8_t buf[8];
+
474  buf[0] = 0x01;
+
475  buf[1] = 0x00;
+
476  for (uint8_t i = 0; i < 6; i++)
+
477  buf[i+2] = BDADDR[5 - i];//Copy into buffer, has to be written reversed
+
478 
+
479  //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)
+
480  pUsb->ctrlReq(bAddress,epInfo[PS3_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0xF5, 0x03, 0x00, 8, 8, buf, NULL);
+
481 #ifdef DEBUG
+
482  Notify(PSTR("\r\nBluetooth Address was set to: "));
+
483  for(int8_t i = 5; i > 0; i--) {
+
484  PrintHex<uint8_t>(my_bdaddr[i]);
+
485  Serial.print(":");
+
486  }
+
487  PrintHex<uint8_t>(my_bdaddr[0]);
+
488 #endif
+
489  return;
+
490 }
+
491 void PS3USB::enable_sixaxis() { //Command used to enable the Dualshock 3 and Navigation controller to send data via USB
+
492  uint8_t cmd_buf[4];
+
493  cmd_buf[0] = 0x42;// Special PS3 Controller enable commands
+
494  cmd_buf[1] = 0x0c;
+
495  cmd_buf[2] = 0x00;
+
496  cmd_buf[3] = 0x00;
+
497 
+
498  //bmRequest = Host to device (0x00) | Class (0x20) | Interface (0x01) = 0x21, bRequest = Set Report (0x09), Report ID (0xF4), Report Type (Feature 0x03), interface (0x00), datalength, datalength, data)
+
499  pUsb->ctrlReq(bAddress,epInfo[PS3_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0xF4, 0x03, 0x00, 4, 4, cmd_buf, NULL);
+
500 }
+
501 
+
502 /* Playstation Move Controller commands */
+
503 void PS3USB::Move_Command(uint8_t* data, uint16_t nbytes) {
+
504  pUsb->outTransfer(bAddress, epInfo[ PS3_OUTPUT_PIPE ].epAddr, nbytes, data);
+
505 }
+
506 
+
507 void PS3USB::moveSetBulb(uint8_t r, uint8_t g, uint8_t b) { //Use this to set the Color using RGB values
+
508  // set the Bulb's values into the write buffer
+
509  writeBuf[2] = r;
+
510  writeBuf[3] = g;
+
511  writeBuf[4] = b;
+
512 
+
513  Move_Command(writeBuf, MOVE_REPORT_BUFFER_SIZE);
+
514 }
+
515 void PS3USB::moveSetBulb(Colors color) { //Use this to set the Color using the predefined colors in "enums.h"
+
516  moveSetBulb((uint8_t)(color >> 16),(uint8_t)(color >> 8),(uint8_t)(color));
+
517 }
+
518 void PS3USB::moveSetRumble(uint8_t rumble) {
+
519 #ifdef DEBUG
+
520  if(rumble < 64 && rumble != 0) // The rumble value has to at least 64, or approximately 25% (64/255*100)
+
521  Notify(PSTR("\r\nThe rumble value has to at least 64, or approximately 25%"));
+
522 #endif
+
523  //set the rumble value into the write buffer
+
524  writeBuf[6] = rumble;
+
525 
+
526  Move_Command(writeBuf, MOVE_REPORT_BUFFER_SIZE);
+
527 }
+
528 void PS3USB::setMoveBdaddr(uint8_t* BDADDR) {
+
529  /* Set the internal bluetooth address */
+
530  uint8_t buf[11];
+
531  buf[0] = 0x05;
+
532  buf[7] = 0x10;
+
533  buf[8] = 0x01;
+
534  buf[9] = 0x02;
+
535  buf[10] = 0x12;
+
536 
+
537  for (uint8_t i = 0; i < 6; i++)
+
538  buf[i + 1] = BDADDR[i];
+
539 
+
540  //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)
+
541  pUsb->ctrlReq(bAddress,epInfo[PS3_CONTROL_PIPE].epAddr, bmREQ_HID_OUT, HID_REQUEST_SET_REPORT, 0x05, 0x03, 0x00,11,11, buf, NULL);
+
542 #ifdef DEBUG
+
543  Notify(PSTR("\r\nBluetooth Address was set to: "));
+
544  for(int8_t i = 5; i > 0; i--) {
+
545  PrintHex<uint8_t>(my_bdaddr[i]);
+
546  Serial.print(":");
+
547  }
+
548  PrintHex<uint8_t>(my_bdaddr[0]);
+
549 #endif
+
550  return;
+
551 }
+
+ + + + diff --git a/_p_s3_u_s_b_8h.html b/_p_s3_u_s_b_8h.html index ecb51a3f..195d234a 100644 --- a/_p_s3_u_s_b_8h.html +++ b/_p_s3_u_s_b_8h.html @@ -158,6 +158,8 @@ Macros
+

Definition at line 51 of file PS3USB.h.

+
@@ -170,6 +172,8 @@ Macros
+

Definition at line 34 of file PS3USB.h.

+
@@ -182,6 +186,8 @@ Macros
+

Definition at line 31 of file PS3USB.h.

+
@@ -194,6 +200,8 @@ Macros
+

Definition at line 52 of file PS3USB.h.

+
@@ -206,6 +214,8 @@ Macros
+

Definition at line 48 of file PS3USB.h.

+
@@ -218,6 +228,8 @@ Macros
+

Definition at line 37 of file PS3USB.h.

+
@@ -230,6 +242,8 @@ Macros
+

Definition at line 39 of file PS3USB.h.

+
@@ -242,6 +256,8 @@ Macros
+

Definition at line 54 of file PS3USB.h.

+
@@ -254,6 +270,8 @@ Macros
+

Definition at line 38 of file PS3USB.h.

+
@@ -266,6 +284,8 @@ Macros
+

Definition at line 43 of file PS3USB.h.

+
@@ -278,6 +298,8 @@ Macros
+

Definition at line 47 of file PS3USB.h.

+
@@ -290,6 +312,8 @@ Macros
+

Definition at line 42 of file PS3USB.h.

+
@@ -302,6 +326,8 @@ Macros
+

Definition at line 45 of file PS3USB.h.

+
@@ -314,12 +340,14 @@ Macros
+

Definition at line 44 of file PS3USB.h.

+
diff --git a/_p_s3_u_s_b_8h_source.html b/_p_s3_u_s_b_8h_source.html index 99780f90..c70207b7 100644 --- a/_p_s3_u_s_b_8h_source.html +++ b/_p_s3_u_s_b_8h_source.html @@ -143,86 +143,72 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
53 
54 #define PS3_MAX_ENDPOINTS 3
55 
-
56 class PS3USB : public USBDeviceConfig {
-
57 public:
-
58  PS3USB(USB *pUsb, uint8_t btadr5=0, uint8_t btadr4=0, uint8_t btadr3=0, uint8_t btadr2=0, uint8_t btadr1=0, uint8_t btadr0=0);
-
59 
-
60  // USBDeviceConfig implementation
-
61  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
-
62  virtual uint8_t Release();
-
63  virtual uint8_t Poll();
-
64  virtual uint8_t GetAddress() { return bAddress; };
-
65  virtual bool isReady() { return bPollEnable; };
-
66 
-
67  void setBdaddr(uint8_t* BDADDR);
-
68  void setMoveBdaddr(uint8_t* BDADDR);
-
69 
-
70  /* PS3 Controller Commands */
-
71  /*
-
72  getButtonPress will return true as long as the button is held down
-
73  While getButtonClick will only return it once
-
74  So you instance if you need to increase a variable once you would use getButtonClick,
-
75  but if you need to drive a robot forward you would use getButtonPress
-
76  */
-
77  bool getButtonPress(Button b);
-
78  bool getButtonClick(Button b);
-
79 
-
80  uint8_t getAnalogButton(Button a);
-
81  uint8_t getAnalogHat(AnalogHat a);
-
82  uint16_t getSensor(Sensor a);
-
83  double getAngle(Angle a);
-
84  bool getStatus(Status c);
-
85  String getStatusString();
-
86 
-
87  /* Commands for Dualshock 3 and Navigation controller */
-
88  void setAllOff();
-
89  void setRumbleOff();
-
90  void setRumbleOn(Rumble mode);
-
91  void setLedOff(LED a);
-
92  void setLedOn(LED a);
-
93  void setLedToggle(LED a);
-
94 
-
95  /* Commands for Motion controller only */
-
96  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b);//Use this to set the Color using RGB values
-
97  void moveSetBulb(Colors color);//Use this to set the Color using the predefined colors in "enum Colors"
-
98  void moveSetRumble(uint8_t rumble);
-
99 
-
100  bool PS3Connected;// Variable used to indicate if the normal playstation controller is successfully connected
-
101  bool PS3MoveConnected;// Variable used to indicate if the move controller is successfully connected
-
102  bool PS3NavigationConnected;// Variable used to indicate if the navigation controller is successfully connected */
-
103 
-
104 protected:
-
105  /* mandatory members */
-
106  USB *pUsb;
-
107  uint8_t bAddress; // device address
-
108  EpInfo epInfo[PS3_MAX_ENDPOINTS]; //endpoint info structure
-
109 
-
110 private:
-
111  bool bPollEnable;
-
112 
-
113  uint32_t timer; // used to continuously set PS3 Move controller Bulb and rumble values
-
114 
-
115  uint32_t ButtonState;
-
116  uint32_t OldButtonState;
-
117  uint32_t ButtonClickState;
-
118 
-
119  uint8_t my_bdaddr[6]; // Change to your dongles Bluetooth address in the constructor
-
120  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
-
121  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
-
122 
-
123  void readReport(); // read incoming data
-
124  void printReport(); // print incoming date - Uncomment for debugging
-
125 
-
126  /* Private commands */
-
127  void PS3_Command(uint8_t* data, uint16_t nbytes);
-
128  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via USB
-
129  void Move_Command(uint8_t* data, uint16_t nbytes);
-
130 };
-
131 #endif
+
64 class PS3USB : public USBDeviceConfig {
+
65 public:
+
73  PS3USB(USB *pUsb, uint8_t btadr5=0, uint8_t btadr4=0, uint8_t btadr3=0, uint8_t btadr2=0, uint8_t btadr1=0, uint8_t btadr0=0);
+
74 
+
83  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
+
88  virtual uint8_t Release();
+
93  virtual uint8_t Poll();
+
98  virtual uint8_t GetAddress() { return bAddress; };
+
103  virtual bool isReady() { return bPollEnable; };
+
110  void setBdaddr(uint8_t* BDADDR);
+
115  void setMoveBdaddr(uint8_t* BDADDR);
+
116 
+
124  bool getButtonPress(Button b);
+
125  bool getButtonClick(Button b);
+
136  uint8_t getAnalogButton(Button a);
+
142  uint8_t getAnalogHat(AnalogHat a);
+
149  uint16_t getSensor(Sensor a);
+
155  double getAngle(Angle a);
+
161  bool getStatus(Status c);
+
166  String getStatusString();
+
167 
+
169  void setAllOff();
+
171  void setRumbleOff();
+
176  void setRumbleOn(Rumble mode);
+
181  void setLedOff(LED a);
+
186  void setLedOn(LED a);
+
191  void setLedToggle(LED a);
+
192 
+
197  void moveSetBulb(uint8_t r, uint8_t g, uint8_t b);
+
202  void moveSetBulb(Colors color);
+
207  void moveSetRumble(uint8_t rumble);
+
211  bool PS3Connected;
+
213  bool PS3MoveConnected;
+
215  bool PS3NavigationConnected;
+
216 
+
217 protected:
+
219  USB *pUsb;
+
221  uint8_t bAddress;
+
223  EpInfo epInfo[PS3_MAX_ENDPOINTS];
+
224 
+
225 private:
+
226  bool bPollEnable;
+
227 
+
228  uint32_t timer; // used to continuously set PS3 Move controller Bulb and rumble values
+
229 
+
230  uint32_t ButtonState;
+
231  uint32_t OldButtonState;
+
232  uint32_t ButtonClickState;
+
233 
+
234  uint8_t my_bdaddr[6]; // Change to your dongles Bluetooth address in the constructor
+
235  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
+
236  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
+
237 
+
238  void readReport(); // read incoming data
+
239  void printReport(); // print incoming date - Uncomment for debugging
+
240 
+
241  /* Private commands */
+
242  void PS3_Command(uint8_t* data, uint16_t nbytes);
+
243  void enable_sixaxis(); // Command used to enable the Dualshock 3 and Navigation controller to send data via USB
+
244  void Move_Command(uint8_t* data, uint16_t nbytes);
+
245 };
+
246 #endif
diff --git a/_r_e_a_d_m_e_8md.html b/_r_e_a_d_m_e_8md.html index 78c2b666..48f85f50 100644 --- a/_r_e_a_d_m_e_8md.html +++ b/_r_e_a_d_m_e_8md.html @@ -84,10 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
/Users/Lauszus/GitHub/USB_Host_Shield_2.0/README.md File Reference
+ +

Go to the source code of this file.

diff --git a/_r_e_a_d_m_e_8md_source.html b/_r_e_a_d_m_e_8md_source.html new file mode 100644 index 00000000..767f10ad --- /dev/null +++ b/_r_e_a_d_m_e_8md_source.html @@ -0,0 +1,241 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/README.md Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + +
+ +
+ All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
+ + +
+ +
+ +
+
+
/Users/Lauszus/GitHub/USB_Host_Shield_2.0/README.md
+
+
+Go to the documentation of this file.
1 # USB Host Library Rev.2.0
+
2 
+
3 The code is released under the GNU General Public License.
+
4 __________
+
5 
+
6 # Summary
+
7 This is Revision 2.0 of MAX3421E-based USB Host Shield Library for AVR's.
+
8 
+
9 Project main web site is: <http://www.circuitsathome.com>.
+
10 
+
11 Some information can also be found at: <http://blog.tkjelectronics.dk/>.
+
12 
+
13 The shield can be purchased at the main site: <http://www.circuitsathome.com/products-page/arduino-shields>.
+
14 
+
15 [![USB Host Shield](http://www.circuitsathome.com/wp/wp-content/uploads/2012/02/UHS_20_main-288x216.jpg)](http://www.circuitsathome.com/products-page/arduino-shields)
+
16 
+
17 For more information about the hardware see the [Hardware Manual](http://www.circuitsathome.com/usb-host-shield-hardware-manual).
+
18 
+
19 # Developed By
+
20 
+
21 * __Oleg Mazurov, Circuits@Home__ - <mazurov@circuitsathome.com>
+
22  * Developer of the USB Core, HID, FTDI, ADK, ACM, and PL2303 libraries
+
23 * __Kristian Lauszus, TKJ Electronics__ - <kristianl@tkjelectronics.com>
+
24  * Developer of the BTD, SPP, PS3, Wii, and Xbox libraries
+
25 
+
26 # How to use the library
+
27 
+
28 ### Arduino ADK
+
29 To use this library with the official [Arduino ADK](http://arduino.cc/en/Main/ArduinoBoardADK) uncomment the following line in [avrpins.h](https://github.com/felis/USB_Host_Shield_2.0/blob/master/avrpins.h):
+
30 
+
31 <code>
+
32 \#define BOARD\_MEGA_ADK
+
33 </code>
+
34 
+
35 ### [Bluetooth libraries](https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp)
+
36 
+
37 The [BTD library](https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp) is a general purpose library for an ordinary Bluetooth dongle.
+
38 This library make it easy to add support for different Bluetooth services like a PS3 or a Wii controller or SPP which is a virtual serial port via Bluetooth.
+
39 Some different examples can be found in the [example directory](https://github.com/felis/USB_Host_Shield_2.0/tree/master/examples/Bluetooth).
+
40 
+
41 The BTD library will also make it possible to use multiple services at once, the following example sketch is an example of this:
+
42 <https://github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/PS3SPP/PS3SPP.ino>
+
43 
+
44 ### [SPP library](https://github.com/felis/USB_Host_Shield_2.0/blob/master/SPP.cpp)
+
45 
+
46 SPP stands for "Serial Port Profile" and is a Bluetooth protocol that implements a virtual comport which allows you to send data back and forth from your computer/phone to your Arduino via Bluetooth.
+
47 It has been tested successfully on Windows, Mac OS X, Linux, and Android.
+
48 Unfortunately Google broke something in Android 4.2, so it's currently not working in this version of Android.
+
49 
+
50 More information can be found at these blog posts:
+
51 
+
52 * <http://www.circuitsathome.com/mcu/bluetooth-rfcommspp-service-support-for-usb-host-2-0-library-released>
+
53 * <http://blog.tkjelectronics.dk/2012/07/rfcommspp-library-for-arduino/>
+
54 
+
55 To implement the SPP protocol I used a Bluetooth sniffing tool called [PacketLogger](http://www.tkjelectronics.com/uploads/PacketLogger.zip) developed by Apple.
+
56 It enables me to see the Bluetooth communication between my Mac and any device.
+
57 
+
58 ### PS3 Library
+
59 
+
60 These libraries consist of the [PS3BT](https://github.com/felis/USB_Host_Shield_2.0/blob/master/PS3BT.cpp) and [PS3USB](https://github.com/felis/USB_Host_Shield_2.0/blob/master/PS3USB.cpp). These libraries allows you to use a Dualshock 3, Navigation or a Motion controller with the USB Host Shield both via Bluetooth and USB.
+
61 
+
62 In order to use your Playstation controller via Bluetooth you have to set the Bluetooth address of the dongle internally to your PS3 Controller. This can be achieved by plugging the controller in via USB and letting the library set it automatically.
+
63 
+
64 __Note:__ To obtain the address you have to plug in the Bluetooth dongle before connecting the controller, or alternatively you could set it in code like so: <https://github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/PS3BT/PS3BT.ino#L12>.
+
65 
+
66 For more information about the PS3 protocol see the official wiki: <https://github.com/felis/USB_Host_Shield_2.0/wiki/PS3-Information>.
+
67 
+
68 Also take a look at the blog posts:
+
69 
+
70 * <http://blog.tkjelectronics.dk/2012/01/ps3-controller-bt-library-for-arduino/>
+
71 * <http://www.circuitsathome.com/mcu/sony-ps3-controller-support-added-to-usb-host-library>
+
72 * <http://www.circuitsathome.com/mcu/arduino/interfacing-ps3-controllers-via-usb>
+
73 
+
74 A special thanks go to the following people:
+
75 
+
76 1. _Richard Ibbotson_ who made this excellent guide: <http://www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part>
+
77 2. _Tomoyuki Tanaka_ for releasing his code for the Arduino USB Host shield connected to the wiimote: <http://www.circuitsathome.com/mcu/rc-car-controlled-by-wii-remote-on-arduino>
+
78 
+
79 Also a big thanks all the people behind these sites about the Motion controller:
+
80 
+
81 * <http://thp.io/2010/psmove/>
+
82 * <http://www.copenhagengamecollective.org/unimove/>
+
83 * <https://github.com/thp/psmoveapi>
+
84 * <http://code.google.com/p/moveonpc/>
+
85 
+
86 ### Xbox 360 Library
+
87 
+
88 The library support one Xbox 360 via USB or up to four Xbox 360 controllers wirelessly by using a [Xbox 360 wireless receiver](http://blog.tkjelectronics.dk/wp-content/uploads/xbox360-wireless-receiver.jpg).
+
89 
+
90 To use it via USB use the [XBOXUSB](https://github.com/felis/USB_Host_Shield_2.0/blob/master/XBOXUSB.cpp) library or to use it wirelessly use the [XBOXRECV](https://github.com/felis/USB_Host_Shield_2.0/blob/master/XBOXRECV.cpp) library.
+
91 
+
92 __Note that a Wireless controller can NOT be used via USB!__
+
93 
+
94 Examples code can be found in the [examples directory](https://github.com/felis/USB_Host_Shield_2.0/tree/master/examples/Xbox).
+
95 
+
96 Also see the following blog posts:
+
97 
+
98 * <http://www.circuitsathome.com/mcu/xbox360-controller-support-added-to-usb-host-shield-2-0-library>
+
99 * <http://blog.tkjelectronics.dk/2012/07/xbox-360-controller-support-added-to-the-usb-host-library/>
+
100 * <http://blog.tkjelectronics.dk/2012/12/xbox-360-receiver-added-to-the-usb-host-library/>
+
101 
+
102 All the information regarding the Xbox 360 controller protocol are form these sites:
+
103 
+
104 * <http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/UsbInfo>
+
105 * <http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/WirelessUsbInfo>
+
106 * <https://github.com/Grumbel/xboxdrv/blob/master/PROTOCOL>
+
107 
+
108 ### [Wii library](https://github.com/felis/USB_Host_Shield_2.0/blob/master/Wii.cpp)
+
109 
+
110 The [Wii](https://github.com/felis/USB_Host_Shield_2.0/blob/master/Wii.cpp) library support the Wiimote, but also the Nunchuch and Motion Plus extensions via Bluetooth. The Wii U Pro Controller is also supported via Bluetooth.
+
111 
+
112 First you have to pair with the controller, this is done automatically by the library if you create the instance like so:
+
113 
+
114 <code>
+
115 WII Wii(&Btd,PAIR);
+
116 </code>
+
117 
+
118 And then press 1 & 2 at once on the Wiimote or press sync if you are using a Wii U Pro Controller.
+
119 
+
120 After that you can simply create the instance like so:
+
121 
+
122 <code>
+
123 WII Wii(&Btd);
+
124 </code>
+
125 
+
126 Then just press any button any button on the Wiimote and it will connect to the dongle.
+
127 
+
128 Take a look at the example for more information: <https://github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/Wii/Wii.ino>.
+
129 
+
130 Also take a look at the blog post:
+
131 
+
132 * <http://blog.tkjelectronics.dk/2012/08/wiimote-added-to-usb-host-library/>
+
133 
+
134 All the information about the Wii controllers are from these sites:
+
135 
+
136 * <http://wiibrew.org/wiki/Wiimote>
+
137 * <http://wiibrew.org/wiki/Wiimote/Extension_Controllers>
+
138 * <http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Nunchuck>
+
139 * <http://wiibrew.org/wiki/Wiimote/Extension_Controllers/Wii_Motion_Plus>
+
140 * The old library created by _Tomoyuki Tanaka_: <https://github.com/moyuchin/WiiRemote_on_Arduino> also helped a lot.
+
141 
+
142 # FAQ
+
143 
+
144 > When I plug my device into the USB connector nothing happens?
+
145 
+
146 Try to connect a external power supply to the Arduino - this solves the problem in most cases.
+
+ + + + diff --git a/_s_p_p_8cpp.html b/_s_p_p_8cpp.html index 8a4f289e..165395fc 100644 --- a/_s_p_p_8cpp.html +++ b/_s_p_p_8cpp.html @@ -99,7 +99,9 @@ Include dependency graph for SPP.cpp: - + +

Go to the source code of this file.

+
@@ -121,6 +123,8 @@ Variables

Macros

#define DEBUG
+

Definition at line 19 of file SPP.cpp.

+

Variable Documentation

@@ -133,7 +137,7 @@ Variables
-Initial value:
= {
+Initial value:
= {
0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,
0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,
0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,
@@ -152,12 +156,14 @@ Variables
0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
}
+

Definition at line 26 of file SPP.cpp.

+
diff --git a/_s_p_p_8cpp_source.html b/_s_p_p_8cpp_source.html new file mode 100644 index 00000000..01fec107 --- /dev/null +++ b/_s_p_p_8cpp_source.html @@ -0,0 +1,1023 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/SPP.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
SPP.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
+
2 
+
3  This software may be distributed and modified under the terms of the GNU
+
4  General Public License version 2 (GPL2) as published by the Free Software
+
5  Foundation and appearing in the file GPL2.TXT included in the packaging of
+
6  this file. Please note that GPL2 Section 2[b] requires that all works based
+
7  on this software must also be made publicly available under the terms of
+
8  the GPL2 ("Copyleft").
+
9 
+
10  Contact information
+
11  -------------------
+
12 
+
13  Kristian Lauszus, TKJ Electronics
+
14  Web : http://www.tkjelectronics.com
+
15  e-mail : kristianl@tkjelectronics.com
+
16  */
+
17 
+
18 #include "SPP.h"
+
19 #define DEBUG // Uncomment to print data for debugging
+
20 //#define EXTRADEBUG // Uncomment to get even more debugging data
+
21 //#define PRINTREPORT // Uncomment to print the report sent to the Arduino
+
22 
+
23 /*
+
24  * CRC (reversed crc) lookup table as calculated by the table generator in ETSI TS 101 369 V6.3.0.
+
25  */
+
26 const uint8_t rfcomm_crc_table[256] PROGMEM = { /* reversed, 8-bit, poly=0x07 */
+
27  0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B,
+
28  0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67,
+
29  0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43,
+
30  0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F,
+
31  0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B,
+
32  0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17,
+
33  0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33,
+
34  0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F,
+
35  0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B,
+
36  0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87,
+
37  0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3,
+
38  0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF,
+
39  0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB,
+
40  0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7,
+
41  0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3,
+
42  0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
+
43 };
+
44 
+
45 SPP::SPP(BTD *p, const char* name, const char* pin):
+
46 pBtd(p) // Pointer to BTD class instance - mandatory
+
47 {
+
48  if (pBtd)
+
49  pBtd->registerServiceClass(this); // Register it as a Bluetooth service
+
50 
+
51  pBtd->btdName = name;
+
52  pBtd->btdPin = pin;
+
53 
+
54  /* Set device cid for the SDP and RFCOMM channelse */
+
55  sdp_dcid[0] = 0x50; // 0x0050
+
56  sdp_dcid[1] = 0x00;
+
57  rfcomm_dcid[0] = 0x51; // 0x0051
+
58  rfcomm_dcid[1] = 0x00;
+
59 
+
60  Reset();
+
61 }
+
62 void SPP::Reset() {
+
63  connected = false;
+
64  RFCOMMConnected = false;
+
65  SDPConnected = false;
+
66  l2cap_sdp_state = L2CAP_SDP_WAIT;
+
67  l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
+
68  l2cap_event_flag = 0;
+
69 }
+ +
71  connected = false;
+
72  // First the two L2CAP channels has to be disconencted and then the HCI connection
+
73  if(RFCOMMConnected)
+
74  pBtd->l2cap_disconnection_request(hci_handle,0x0A, rfcomm_scid, rfcomm_dcid);
+
75  if(RFCOMMConnected && SDPConnected)
+
76  delay(1); // Add delay between commands
+
77  if(SDPConnected)
+
78  pBtd->l2cap_disconnection_request(hci_handle,0x0B, sdp_scid, sdp_dcid);
+
79  l2cap_sdp_state = L2CAP_DISCONNECT_RESPONSE;
+
80 }
+
81 void SPP::ACLData(uint8_t* l2capinbuf) {
+
82  if(!connected) {
+
83  if (l2capinbuf[8] == L2CAP_CMD_CONNECTION_REQUEST) {
+
84  if((l2capinbuf[12] | (l2capinbuf[13] << 8)) == SDP_PSM && !pBtd->sdpConnectionClaimed) {
+
85  pBtd->sdpConnectionClaimed = true;
+
86  hci_handle = pBtd->hci_handle; // Store the HCI Handle for the connection
+
87  l2cap_sdp_state = L2CAP_SDP_WAIT; // Reset state
+
88  } else if((l2capinbuf[12] | (l2capinbuf[13] << 8)) == RFCOMM_PSM && !pBtd->rfcommConnectionClaimed) {
+
89  pBtd->rfcommConnectionClaimed = true;
+
90  hci_handle = pBtd->hci_handle; // Store the HCI Handle for the connection
+
91  l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT; // Reset state
+
92  }
+
93  }
+
94  }
+
95  if (((l2capinbuf[0] | (l2capinbuf[1] << 8)) == (hci_handle | 0x2000))) { // acl_handle_ok
+
96  if ((l2capinbuf[6] | (l2capinbuf[7] << 8)) == 0x0001) { //l2cap_control - Channel ID for ACL-U
+
97  if (l2capinbuf[8] == L2CAP_CMD_COMMAND_REJECT) {
+
98 #ifdef DEBUG
+
99  Notify(PSTR("\r\nL2CAP Command Rejected - Reason: "));
+
100  PrintHex<uint8_t>(l2capinbuf[13]);
+
101  Notify(PSTR(" "));
+
102  PrintHex<uint8_t>(l2capinbuf[12]);
+
103  Notify(PSTR(" Data: "));
+
104  PrintHex<uint8_t>(l2capinbuf[17]);
+
105  Notify(PSTR(" "));
+
106  PrintHex<uint8_t>(l2capinbuf[16]);
+
107  Notify(PSTR(" "));
+
108  PrintHex<uint8_t>(l2capinbuf[15]);
+
109  Notify(PSTR(" "));
+
110  PrintHex<uint8_t>(l2capinbuf[14]);
+
111 #endif
+
112  } else if (l2capinbuf[8] == L2CAP_CMD_CONNECTION_REQUEST) {
+
113 #ifdef EXTRADEBUG
+
114  Notify(PSTR("\r\nL2CAP Connection Request - PSM: "));
+
115  PrintHex<uint8_t>(l2capinbuf[13]);
+
116  Notify(PSTR(" "));
+
117  PrintHex<uint8_t>(l2capinbuf[12]);
+
118  Notify(PSTR(" SCID: "));
+
119  PrintHex<uint8_t>(l2capinbuf[15]);
+
120  Notify(PSTR(" "));
+
121  PrintHex<uint8_t>(l2capinbuf[14]);
+
122  Notify(PSTR(" Identifier: "));
+
123  PrintHex<uint8_t>(l2capinbuf[9]);
+
124 #endif
+
125  if ((l2capinbuf[12] | (l2capinbuf[13] << 8)) == SDP_PSM) { // It doesn't matter if it receives another reqeust, since it waits for the channel to disconnect in the L2CAP_SDP_DONE state, and the l2cap_event_flag will be cleared if so
+
126  identifier = l2capinbuf[9];
+
127  sdp_scid[0] = l2capinbuf[14];
+
128  sdp_scid[1] = l2capinbuf[15];
+
129  l2cap_event_flag |= L2CAP_FLAG_CONNECTION_SDP_REQUEST;
+
130  } else if ((l2capinbuf[12] | (l2capinbuf[13] << 8)) == RFCOMM_PSM) { // ----- || -----
+
131  identifier = l2capinbuf[9];
+
132  rfcomm_scid[0] = l2capinbuf[14];
+
133  rfcomm_scid[1] = l2capinbuf[15];
+
134  l2cap_event_flag |= L2CAP_FLAG_CONNECTION_RFCOMM_REQUEST;
+
135  }
+
136  } else if (l2capinbuf[8] == L2CAP_CMD_CONFIG_RESPONSE) {
+
137  if ((l2capinbuf[16] | (l2capinbuf[17] << 8)) == 0x0000) { // Success
+
138  if (l2capinbuf[12] == sdp_dcid[0] && l2capinbuf[13] == sdp_dcid[1]) {
+
139  //Serial.print("\r\nSDP Configuration Complete");
+
140  l2cap_event_flag |= L2CAP_FLAG_CONFIG_SDP_SUCCESS;
+
141  }
+
142  else if (l2capinbuf[12] == rfcomm_dcid[0] && l2capinbuf[13] == rfcomm_dcid[1]) {
+
143  //Serial.print("\r\nRFCOMM Configuration Complete");
+
144  l2cap_event_flag |= L2CAP_FLAG_CONFIG_RFCOMM_SUCCESS;
+
145  }
+
146  }
+
147  } else if (l2capinbuf[8] == L2CAP_CMD_CONFIG_REQUEST) {
+
148  if (l2capinbuf[12] == sdp_dcid[0] && l2capinbuf[13] == sdp_dcid[1]) {
+
149  //Serial.print("\r\nSDP Configuration Request");
+
150  identifier = l2capinbuf[9];
+
151  l2cap_event_flag |= L2CAP_FLAG_CONFIG_SDP_REQUEST;
+
152  }
+
153  else if (l2capinbuf[12] == rfcomm_dcid[0] && l2capinbuf[13] == rfcomm_dcid[1]) {
+
154  //Serial.print("\r\nRFCOMM Configuration Request");
+
155  identifier = l2capinbuf[9];
+
156  l2cap_event_flag |= L2CAP_FLAG_CONFIG_RFCOMM_REQUEST;
+
157  }
+
158  } else if (l2capinbuf[8] == L2CAP_CMD_DISCONNECT_REQUEST) {
+
159  if (l2capinbuf[12] == sdp_dcid[0] && l2capinbuf[13] == sdp_dcid[1]) {
+
160  //Notify(PSTR("\r\nDisconnect Request: SDP Channel"));
+
161  identifier = l2capinbuf[9];
+
162  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_SDP_REQUEST;
+
163  } else if (l2capinbuf[12] == rfcomm_dcid[0] && l2capinbuf[13] == rfcomm_dcid[1]) {
+
164  //Notify(PSTR("\r\nDisconnect Request: RFCOMM Channel"));
+
165  identifier = l2capinbuf[9];
+
166  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST;
+
167  }
+
168  } else if (l2capinbuf[8] == L2CAP_CMD_DISCONNECT_RESPONSE) {
+
169  if (l2capinbuf[12] == sdp_scid[0] && l2capinbuf[13] == sdp_scid[1]) {
+
170  //Serial.print("\r\nDisconnect Response: SDP Channel");
+
171  identifier = l2capinbuf[9];
+
172  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_RESPONSE;
+
173  } else if (l2capinbuf[12] == rfcomm_scid[0] && l2capinbuf[13] == rfcomm_scid[1]) {
+
174  //Serial.print("\r\nDisconnect Response: RFCOMM Channel");
+
175  identifier = l2capinbuf[9];
+
176  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_RESPONSE;
+
177  }
+
178  } else if (l2capinbuf[8] == L2CAP_CMD_INFORMATION_REQUEST) {
+
179 #ifdef DEBUG
+
180  Notify(PSTR("\r\nInformation request"));
+
181 #endif
+
182  identifier = l2capinbuf[9];
+
183  pBtd->l2cap_information_response(hci_handle,identifier,l2capinbuf[12],l2capinbuf[13]);
+
184  }
+
185 #ifdef EXTRADEBUG
+
186  else {
+
187  Notify(PSTR("\r\nL2CAP Unknown Signaling Command: "));
+
188  PrintHex<uint8_t>(l2capinbuf[8]);
+
189  }
+
190 #endif
+
191  } else if (l2capinbuf[6] == sdp_dcid[0] && l2capinbuf[7] == sdp_dcid[1]) { // SDP
+
192  if(l2capinbuf[8] == SDP_SERVICE_SEARCH_ATTRIBUTE_REQUEST_PDU) {
+
193  /*
+
194  Serial.print("\r\nUUID: 0x");
+
195  Serial.print(l2capinbuf[16],HEX);
+
196  Serial.print(" ");
+
197  Serial.print(l2capinbuf[17],HEX);
+
198  */
+
199  if ((l2capinbuf[16] << 8 | l2capinbuf[17]) == SERIALPORT_UUID) {
+
200  if(firstMessage) {
+
201  serialPortResponse1(l2capinbuf[9],l2capinbuf[10]);
+
202  firstMessage = false;
+
203  } else {
+
204  serialPortResponse2(l2capinbuf[9],l2capinbuf[10]); // Serialport continuation state
+
205  firstMessage = true;
+
206  }
+
207  } else if ((l2capinbuf[16] << 8 | l2capinbuf[17]) == L2CAP_UUID) {
+
208  if(firstMessage) {
+
209  l2capResponse1(l2capinbuf[9],l2capinbuf[10]);
+
210  firstMessage = false;
+
211  } else {
+
212  l2capResponse2(l2capinbuf[9],l2capinbuf[10]); // L2CAP continuation state
+
213  firstMessage = true;
+
214  }
+
215  } else
+
216  serviceNotSupported(l2capinbuf[9],l2capinbuf[10]); // The service is not supported
+
217  }
+
218  } else if (l2capinbuf[6] == rfcomm_dcid[0] && l2capinbuf[7] == rfcomm_dcid[1]) { // RFCOMM
+
219  rfcommChannel = l2capinbuf[8] & 0xF8;
+
220  rfcommDirection = l2capinbuf[8] & 0x04;
+
221  rfcommCommandResponse = l2capinbuf[8] & 0x02;
+
222  rfcommChannelType = l2capinbuf[9] & 0xEF;
+
223  rfcommPfBit = l2capinbuf[9] & 0x10;
+
224 
+
225  if(rfcommChannel>>3 != 0x00)
+
226  rfcommChannelConnection = rfcommChannel;
+
227 
+
228 #ifdef EXTRADEBUG
+
229  Notify(PSTR("\r\nRFCOMM Channel: "));
+
230  Serial.print(rfcommChannel>>3,HEX);
+
231  Notify(PSTR(" Direction: "));
+
232  Serial.print(rfcommDirection>>2,HEX);
+
233  Notify(PSTR(" CommandResponse: "));
+
234  Serial.print(rfcommCommandResponse>>1,HEX);
+
235  Notify(PSTR(" ChannelType: "));
+
236  Serial.print(rfcommChannelType,HEX);
+
237  Notify(PSTR(" PF_BIT: "));
+
238  Serial.print(rfcommPfBit,HEX);
+
239 #endif
+
240  if (rfcommChannelType == RFCOMM_DISC) {
+
241 #ifdef DEBUG
+
242  Notify(PSTR("\r\nReceived Disconnect RFCOMM Command on channel: "));
+
243  Serial.print(rfcommChannel>>3,HEX);
+
244 #endif
+
245  connected = false;
+
246  sendRfcomm(rfcommChannel,rfcommDirection,rfcommCommandResponse,RFCOMM_UA,rfcommPfBit,rfcommbuf,0x00); // UA Command
+
247  }
+
248  if(connected) {
+
249  /* Read the incoming message */
+
250  if(rfcommChannelType == RFCOMM_UIH && rfcommChannel == rfcommChannelConnection) {
+
251  uint8_t length = l2capinbuf[10] >> 1; // Get length
+
252  uint8_t offset = l2capinbuf[4]-length-4; // See if there is credit
+
253  if(rfcommAvailable + length <= sizeof(rfcommDataBuffer)) { // Don't add data to buffer if it would be full
+
254  for(uint8_t i = 0; i < length; i++)
+
255  rfcommDataBuffer[rfcommAvailable+i] = l2capinbuf[11+i+offset];
+
256  rfcommAvailable += length;
+
257  }
+
258 #ifdef EXTRADEBUG
+
259  Notify(PSTR("\r\nRFCOMM Data Available: "));
+
260  Serial.print(rfcommAvailable);
+
261  if (offset) {
+
262  Notify(PSTR(" - Credit: 0x"));
+
263  Serial.print(l2capinbuf[11],HEX);
+
264  }
+
265 #endif
+
266 #ifdef PRINTREPORT // Uncomment "#define PRINTREPORT" to print the report send to the Arduino via Bluetooth
+
267  for(uint8_t i = 0; i < length; i++)
+
268  Serial.write(l2capinbuf[i+11+offset]);
+
269 #endif
+
270  }
+
271  } else {
+
272  if(rfcommChannelType == RFCOMM_SABM) { // SABM Command - this is sent twice: once for channel 0 and then for the channel to establish
+
273 #ifdef DEBUG
+
274  Notify(PSTR("\r\nReceived SABM Command"));
+
275 #endif
+
276  sendRfcomm(rfcommChannel,rfcommDirection,rfcommCommandResponse,RFCOMM_UA,rfcommPfBit,rfcommbuf,0x00); // UA Command
+
277  } else if(rfcommChannelType == RFCOMM_UIH && l2capinbuf[11] == BT_RFCOMM_PN_CMD) { // UIH Parameter Negotiation Command
+
278 #ifdef DEBUG
+
279  Notify(PSTR("\r\nReceived UIH Parameter Negotiation Command"));
+
280 #endif
+
281  rfcommbuf[0] = BT_RFCOMM_PN_RSP; // UIH Parameter Negotiation Response
+
282  rfcommbuf[1] = l2capinbuf[12]; // Length and shiftet like so: length << 1 | 1
+
283  rfcommbuf[2] = l2capinbuf[13]; // Channel: channel << 1 | 1
+
284  rfcommbuf[3] = 0xE0; // Pre difined for Bluetooth, see 5.5.3 of TS 07.10 Adaption for RFCOMM
+
285  rfcommbuf[4] = 0x00; // Priority
+
286  rfcommbuf[5] = 0x00; // Timer
+
287  rfcommbuf[6] = 0x40; // Max Fram Size LSB - we will just set this to 64
+
288  rfcommbuf[7] = 0x00; // Max Fram Size MSB
+
289  rfcommbuf[8] = 0x00; // MaxRatransm.
+
290  rfcommbuf[9] = 0x00; // Number of Frames
+
291  sendRfcomm(rfcommChannel,rfcommDirection,0,RFCOMM_UIH,rfcommPfBit,rfcommbuf,0x0A);
+
292  } else if(rfcommChannelType == RFCOMM_UIH && l2capinbuf[11] == BT_RFCOMM_MSC_CMD) { // UIH Modem Status Command
+
293 #ifdef DEBUG
+
294  Notify(PSTR("\r\nSend UIH Modem Status Response"));
+
295 #endif
+
296  rfcommbuf[0] = BT_RFCOMM_MSC_RSP; // UIH Modem Status Response
+
297  rfcommbuf[1] = 2 << 1 | 1; // Length and shiftet like so: length << 1 | 1
+
298  rfcommbuf[2] = l2capinbuf[13]; // Channel: (1 << 0) | (1 << 1) | (0 << 2) | (channel << 3)
+
299  rfcommbuf[3] = l2capinbuf[14];
+
300  sendRfcomm(rfcommChannel,rfcommDirection,0,RFCOMM_UIH,rfcommPfBit,rfcommbuf,0x04);
+
301 
+
302  delay(1);
+
303 #ifdef DEBUG
+
304  Notify(PSTR("\r\nSend UIH Modem Status Command"));
+
305 #endif
+
306  rfcommbuf[0] = BT_RFCOMM_MSC_CMD; // UIH Modem Status Command
+
307  rfcommbuf[1] = 2 << 1 | 1; // Length and shiftet like so: length << 1 | 1
+
308  rfcommbuf[2] = l2capinbuf[13]; // Channel: (1 << 0) | (1 << 1) | (0 << 2) | (channel << 3)
+
309  rfcommbuf[3] = 0x8D; // Can receive frames (YES), Ready to Communicate (YES), Ready to Receive (YES), Incomig Call (NO), Data is Value (YES)
+
310 
+
311  sendRfcomm(rfcommChannel,rfcommDirection,0,RFCOMM_UIH,rfcommPfBit,rfcommbuf,0x04);
+
312  } else if(rfcommChannelType == RFCOMM_UIH && l2capinbuf[11] == BT_RFCOMM_MSC_RSP) { // UIH Modem Status Response
+
313  if(!creditSent) {
+
314 #ifdef DEBUG
+
315  Notify(PSTR("\r\nSend UIH Command with credit"));
+
316 #endif
+
317  sendRfcommCredit(rfcommChannelConnection,rfcommDirection,0,RFCOMM_UIH,0x10,sizeof(rfcommDataBuffer)); // Send credit
+
318  creditSent = true;
+
319  timer = millis();
+
320  waitForLastCommand = true;
+
321  }
+
322  } else if(rfcommChannelType == RFCOMM_UIH && l2capinbuf[10] == 0x01) { // UIH Command with credit
+
323 #ifdef DEBUG
+
324  Notify(PSTR("\r\nReceived UIH Command with credit"));
+
325 #endif
+
326  } else if(rfcommChannelType == RFCOMM_UIH && l2capinbuf[11] == BT_RFCOMM_RPN_CMD) { // UIH Remote Port Negotiation Command
+
327 #ifdef DEBUG
+
328  Notify(PSTR("\r\nReceived UIH Remote Port Negotiation Command"));
+
329 #endif
+
330  rfcommbuf[0] = BT_RFCOMM_RPN_RSP; // Command
+
331  rfcommbuf[1] = l2capinbuf[12]; // Length and shiftet like so: length << 1 | 1
+
332  rfcommbuf[2] = l2capinbuf[13]; // Channel: channel << 1 | 1
+
333  rfcommbuf[3] = l2capinbuf[14]; // Pre difined for Bluetooth, see 5.5.3 of TS 07.10 Adaption for RFCOMM
+
334  rfcommbuf[4] = l2capinbuf[15]; // Priority
+
335  rfcommbuf[5] = l2capinbuf[16]; // Timer
+
336  rfcommbuf[6] = l2capinbuf[17]; // Max Fram Size LSB
+
337  rfcommbuf[7] = l2capinbuf[18]; // Max Fram Size MSB
+
338  rfcommbuf[8] = l2capinbuf[19]; // MaxRatransm.
+
339  rfcommbuf[9] = l2capinbuf[20]; // Number of Frames
+
340  sendRfcomm(rfcommChannel,rfcommDirection,0,RFCOMM_UIH,rfcommPfBit,rfcommbuf,0x0A); // UIH Remote Port Negotiation Response
+
341 #ifdef DEBUG
+
342  Notify(PSTR("\r\nRFCOMM Connection is now established\r\n"));
+
343 #endif
+
344  waitForLastCommand = false;
+
345  creditSent = false;
+
346  connected = true; // The RFCOMM channel is now established
+
347  }
+
348 #ifdef DEBUG
+
349  else if(rfcommChannelType != RFCOMM_DISC) {
+
350  Notify(PSTR("\r\nUnsupported RFCOMM Data - ChannelType: "));
+
351  PrintHex<uint8_t>(rfcommChannelType);
+
352  Notify(PSTR(" Command: "));
+
353  PrintHex<uint8_t>(l2capinbuf[11]);
+
354  }
+
355 #endif
+
356  }
+
357  }
+
358 #ifdef EXTRADEBUG
+
359  else {
+
360  Notify(PSTR("\r\nUnsupported L2CAP Data - Channel ID: "));
+
361  PrintHex<uint8_t>(l2capinbuf[7]);
+
362  Notify(PSTR(" "));
+
363  PrintHex<uint8_t>(l2capinbuf[6]);
+
364  }
+
365 #endif
+
366  SDP_task();
+
367  RFCOMM_task();
+
368  }
+
369 }
+
370 void SPP::Run() {
+
371  if(waitForLastCommand && (millis() - timer) > 100) { // We will only wait 100ms and see if the UIH Remote Port Negotiation Command is send, as some deviced don't send it
+
372 #ifdef DEBUG
+
373  Notify(PSTR("\r\nRFCOMM Connection is now established - Automatic\r\n"));
+
374 #endif
+
375  creditSent = false;
+
376  waitForLastCommand = false;
+
377  connected = true; // The RFCOMM channel is now established
+
378  }
+
379 }
+
380 void SPP::SDP_task() {
+
381  switch (l2cap_sdp_state)
+
382  {
+
383  case L2CAP_SDP_WAIT:
+ +
385  l2cap_event_flag &= ~L2CAP_FLAG_CONNECTION_SDP_REQUEST; // Clear flag
+
386 #ifdef DEBUG
+
387  Notify(PSTR("\r\nSDP Incoming Connection Request"));
+
388 #endif
+
389  pBtd->l2cap_connection_response(hci_handle,identifier, sdp_dcid, sdp_scid, PENDING);
+
390  delay(1);
+
391  pBtd->l2cap_connection_response(hci_handle,identifier, sdp_dcid, sdp_scid, SUCCESSFUL);
+
392  identifier++;
+
393  delay(1);
+
394  pBtd->l2cap_config_request(hci_handle,identifier, sdp_scid);
+
395  l2cap_sdp_state = L2CAP_SDP_REQUEST;
+
396  }
+
397  break;
+
398  case L2CAP_SDP_REQUEST:
+ +
400  l2cap_event_flag &= ~L2CAP_FLAG_CONFIG_SDP_REQUEST; // Clear flag
+
401 #ifdef DEBUG
+
402  Notify(PSTR("\r\nSDP Configuration Request"));
+
403 #endif
+
404  pBtd->l2cap_config_response(hci_handle,identifier, sdp_scid);
+
405  l2cap_sdp_state = L2CAP_SDP_SUCCESS;
+
406  }
+
407  break;
+
408  case L2CAP_SDP_SUCCESS:
+ +
410  l2cap_event_flag &= ~L2CAP_FLAG_CONFIG_SDP_SUCCESS; // Clear flag
+
411 #ifdef DEBUG
+
412  Notify(PSTR("\r\nSDP Successfully Configured"));
+
413 #endif
+
414  firstMessage = true; // Reset bool
+
415  SDPConnected = true;
+
416  l2cap_sdp_state = L2CAP_SDP_DONE;
+
417  }
+
418  break;
+
419  case L2CAP_SDP_DONE:
+ +
421  l2cap_event_flag &= ~L2CAP_FLAG_DISCONNECT_SDP_REQUEST; // Clear flag
+
422  SDPConnected = false;
+
423 #ifdef DEBUG
+
424  Notify(PSTR("\r\nDisconnected SDP Channel"));
+
425 #endif
+
426  pBtd->l2cap_disconnection_response(hci_handle,identifier,sdp_dcid,sdp_scid);
+
427  l2cap_sdp_state = L2CAP_SDP_WAIT;
+ +
429  l2cap_rfcomm_state = L2CAP_SDP_WAIT;
+
430  break;
+
431  case L2CAP_DISCONNECT_RESPONSE: // This is for both disconnection response from the RFCOMM and SDP channel if they were connected
+ +
433 #ifdef DEBUG
+
434  Notify(PSTR("\r\nDisconnected L2CAP Connection"));
+
435 #endif
+
436  RFCOMMConnected = false;
+
437  SDPConnected = false;
+
438  pBtd->hci_disconnect(hci_handle);
+
439  hci_handle = -1; // Reset handle
+
440  l2cap_event_flag = 0; // Reset flags
+
441  l2cap_sdp_state = L2CAP_SDP_WAIT;
+
442  l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
+
443  }
+
444  break;
+
445  }
+
446 }
+
447 void SPP::RFCOMM_task()
+
448 {
+
449  switch (l2cap_rfcomm_state)
+
450  {
+
451  case L2CAP_RFCOMM_WAIT:
+ +
453  l2cap_event_flag &= ~L2CAP_FLAG_CONNECTION_RFCOMM_REQUEST; // Clear flag
+
454 #ifdef DEBUG
+
455  Notify(PSTR("\r\nRFCOMM Incoming Connection Request"));
+
456 #endif
+
457  pBtd->l2cap_connection_response(hci_handle,identifier, rfcomm_dcid, rfcomm_scid, PENDING);
+
458  delay(1);
+
459  pBtd->l2cap_connection_response(hci_handle,identifier, rfcomm_dcid, rfcomm_scid, SUCCESSFUL);
+
460  identifier++;
+
461  delay(1);
+
462  pBtd->l2cap_config_request(hci_handle,identifier, rfcomm_scid);
+
463  l2cap_rfcomm_state = L2CAP_RFCOMM_REQUEST;
+
464  }
+
465  break;
+ + +
468  l2cap_event_flag &= ~L2CAP_FLAG_CONFIG_RFCOMM_REQUEST; // Clear flag
+
469 #ifdef DEBUG
+
470  Notify(PSTR("\r\nRFCOMM Configuration Request"));
+
471 #endif
+
472  pBtd->l2cap_config_response(hci_handle,identifier, rfcomm_scid);
+
473  l2cap_rfcomm_state = L2CAP_RFCOMM_SUCCESS;
+
474  }
+
475  break;
+ + +
478  l2cap_event_flag &= ~L2CAP_FLAG_CONFIG_RFCOMM_SUCCESS; // Clear flag
+
479 #ifdef DEBUG
+
480  Notify(PSTR("\r\nRFCOMM Successfully Configured"));
+
481 #endif
+
482  rfcommAvailable = 0; // Reset number of bytes available
+
483  bytesRead = 0; // Reset number of bytes received
+
484  RFCOMMConnected = true;
+
485  l2cap_rfcomm_state = L2CAP_RFCOMM_DONE;
+
486  }
+
487  break;
+
488  case L2CAP_RFCOMM_DONE:
+ +
490  l2cap_event_flag &= ~L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST; // Clear flag
+
491  RFCOMMConnected = false;
+
492  connected = false;
+
493 #ifdef DEBUG
+
494  Notify(PSTR("\r\nDisconnected RFCOMM Channel"));
+
495 #endif
+
496  pBtd->l2cap_disconnection_response(hci_handle,identifier,rfcomm_dcid,rfcomm_scid);
+
497  l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
+ +
499  l2cap_rfcomm_state = L2CAP_RFCOMM_WAIT;
+
500  break;
+
501  }
+
502 }
+
503 /************************************************************/
+
504 /* SDP Commands */
+
505 /************************************************************/
+
506 void SPP::SDP_Command(uint8_t* data, uint8_t nbytes) { // See page 223 in the Bluetooth specs
+
507  pBtd->L2CAP_Command(hci_handle,data,nbytes,sdp_scid[0],sdp_scid[1]);
+
508 }
+
509 void SPP::serviceNotSupported(uint8_t transactionIDHigh, uint8_t transactionIDLow) { // See page 235 in the Bluetooth specs
+ +
511  l2capoutbuf[1] = transactionIDHigh;
+
512  l2capoutbuf[2] = transactionIDLow;
+
513  l2capoutbuf[3] = 0x00; // Parameter Length
+
514  l2capoutbuf[4] = 0x05; // Parameter Length
+
515  l2capoutbuf[5] = 0x00; // AttributeListsByteCount
+
516  l2capoutbuf[6] = 0x02; // AttributeListsByteCount
+
517 
+
518  /* Attribute ID/Value Sequence: */
+
519  l2capoutbuf[7] = 0x35;
+
520  l2capoutbuf[8] = 0x00;
+
521  l2capoutbuf[9] = 0x00;
+
522 
+
523  SDP_Command(l2capoutbuf,10);
+
524 }
+
525 void SPP::serialPortResponse1(uint8_t transactionIDHigh, uint8_t transactionIDLow) {
+ +
527  l2capoutbuf[1] = transactionIDHigh;
+
528  l2capoutbuf[2] = transactionIDLow;
+
529  l2capoutbuf[3] = 0x00; // Parameter Length
+
530  l2capoutbuf[4] = 0x2B; // Parameter Length
+
531  l2capoutbuf[5] = 0x00; // AttributeListsByteCount
+
532  l2capoutbuf[6] = 0x26; // AttributeListsByteCount
+
533 
+
534  /* Attribute ID/Value Sequence: */
+
535  l2capoutbuf[7] = 0x36;
+
536  l2capoutbuf[8] = 0x00;
+
537  l2capoutbuf[9] = 0x3C;
+
538  l2capoutbuf[10] = 0x36;
+
539  l2capoutbuf[11] = 0x00;
+
540 
+
541  l2capoutbuf[12] = 0x39;
+
542  l2capoutbuf[13] = 0x09;
+
543  l2capoutbuf[14] = 0x00;
+
544  l2capoutbuf[15] = 0x00;
+
545  l2capoutbuf[16] = 0x0A;
+
546  l2capoutbuf[17] = 0x00;
+
547  l2capoutbuf[18] = 0x01;
+
548  l2capoutbuf[19] = 0x00;
+
549  l2capoutbuf[20] = 0x06;
+
550  l2capoutbuf[21] = 0x09;
+
551  l2capoutbuf[22] = 0x00;
+
552  l2capoutbuf[23] = 0x01;
+
553  l2capoutbuf[24] = 0x35;
+
554  l2capoutbuf[25] = 0x03;
+
555  l2capoutbuf[26] = 0x19;
+
556  l2capoutbuf[27] = 0x11;
+
557 
+
558  l2capoutbuf[28] = 0x01;
+
559  l2capoutbuf[29] = 0x09;
+
560  l2capoutbuf[30] = 0x00;
+
561  l2capoutbuf[31] = 0x04;
+
562  l2capoutbuf[32] = 0x35;
+
563  l2capoutbuf[33] = 0x0C;
+
564  l2capoutbuf[34] = 0x35;
+
565  l2capoutbuf[35] = 0x03;
+
566  l2capoutbuf[36] = 0x19;
+
567  l2capoutbuf[37] = 0x01;
+
568  l2capoutbuf[38] = 0x00;
+
569  l2capoutbuf[39] = 0x35;
+
570  l2capoutbuf[40] = 0x05;
+
571  l2capoutbuf[41] = 0x19;
+
572  l2capoutbuf[42] = 0x00;
+
573  l2capoutbuf[43] = 0x03;
+
574 
+
575  l2capoutbuf[44] = 0x08;
+
576  l2capoutbuf[45] = 0x02; // Two extra bytes
+
577  l2capoutbuf[46] = 0x00; // 25 (0x19) more bytes to come
+
578  l2capoutbuf[47] = 0x19;
+
579 
+
580  SDP_Command(l2capoutbuf,48);
+
581 }
+
582 void SPP::serialPortResponse2(uint8_t transactionIDHigh, uint8_t transactionIDLow) {
+ +
584  l2capoutbuf[1] = transactionIDHigh;
+
585  l2capoutbuf[2] = transactionIDLow;
+
586  l2capoutbuf[3] = 0x00; // Parameter Length
+
587  l2capoutbuf[4] = 0x1C; // Parameter Length
+
588  l2capoutbuf[5] = 0x00; // AttributeListsByteCount
+
589  l2capoutbuf[6] = 0x19; // AttributeListsByteCount
+
590 
+
591  /* Attribute ID/Value Sequence: */
+
592  l2capoutbuf[7] = 0x01;
+
593  l2capoutbuf[8] = 0x09;
+
594  l2capoutbuf[9] = 0x00;
+
595  l2capoutbuf[10] = 0x06;
+
596  l2capoutbuf[11] = 0x35;
+
597 
+
598  l2capoutbuf[12] = 0x09;
+
599  l2capoutbuf[13] = 0x09;
+
600  l2capoutbuf[14] = 0x65;
+
601  l2capoutbuf[15] = 0x6E;
+
602  l2capoutbuf[16] = 0x09;
+
603  l2capoutbuf[17] = 0x00;
+
604  l2capoutbuf[18] = 0x6A;
+
605  l2capoutbuf[19] = 0x09;
+
606  l2capoutbuf[20] = 0x01;
+
607  l2capoutbuf[21] = 0x00;
+
608  l2capoutbuf[22] = 0x09;
+
609  l2capoutbuf[23] = 0x01;
+
610  l2capoutbuf[24] = 0x00;
+
611  l2capoutbuf[25] = 0x25;
+
612 
+
613  l2capoutbuf[26] = 0x05; // Name length
+
614  l2capoutbuf[27] = 'T';
+
615  l2capoutbuf[28] = 'K';
+
616  l2capoutbuf[29] = 'J';
+
617  l2capoutbuf[30] = 'S';
+
618  l2capoutbuf[31] = 'P';
+
619  l2capoutbuf[32] = 0x00; // No more data
+
620 
+
621  SDP_Command(l2capoutbuf,33);
+
622 }
+
623 void SPP::l2capResponse1(uint8_t transactionIDHigh, uint8_t transactionIDLow) {
+
624  serialPortResponse1(transactionIDHigh,transactionIDLow); // These has to send all the supported functions, since it only supports virtual serialport it just sends the message again
+
625 }
+
626 void SPP::l2capResponse2(uint8_t transactionIDHigh, uint8_t transactionIDLow) {
+
627  serialPortResponse2(transactionIDHigh,transactionIDLow); // Same data as serialPortResponse2
+
628 }
+
629 /************************************************************/
+
630 /* RFCOMM Commands */
+
631 /************************************************************/
+
632 void SPP::RFCOMM_Command(uint8_t* data, uint8_t nbytes) {
+
633  if ((millis() - printTimer) < 10)// Check if is has been more than 10ms since last command
+
634  delay((uint32_t)(10 - (millis() - printTimer))); // There have to be a delay between commands
+
635  pBtd->L2CAP_Command(hci_handle,data,nbytes,rfcomm_scid[0],rfcomm_scid[1]);
+
636  printTimer = millis();
+
637 }
+
638 
+
639 void SPP::sendRfcomm(uint8_t channel, uint8_t direction, uint8_t CR, uint8_t channelType, uint8_t pfBit, uint8_t* data, uint8_t length) {
+
640  l2capoutbuf[0] = channel | direction | CR | extendAddress; // RFCOMM Address
+
641  l2capoutbuf[1] = channelType | pfBit; // RFCOMM Control
+
642  l2capoutbuf[2] = length << 1 | 0x01; // Length and format (allways 0x01 bytes format)
+
643  uint8_t i = 0;
+
644  for(; i < length; i++)
+
645  l2capoutbuf[i+3] = data[i];
+
646  l2capoutbuf[i+3] = calcFcs(l2capoutbuf);
+
647 #ifdef EXTRADEBUG
+
648  Notify(PSTR(" - RFCOMM Data: "));
+
649  for(i = 0; i < length+4; i++) {
+
650  Serial.print(l2capoutbuf[i],HEX);
+
651  Notify(PSTR(" "));
+
652  }
+
653 #endif
+
654  RFCOMM_Command(l2capoutbuf,length+4);
+
655 }
+
656 
+
657 void SPP::sendRfcommCredit(uint8_t channel, uint8_t direction, uint8_t CR, uint8_t channelType, uint8_t pfBit, uint8_t credit) {
+
658  l2capoutbuf[0] = channel | direction | CR | extendAddress; // RFCOMM Address
+
659  l2capoutbuf[1] = channelType | pfBit; // RFCOMM Control
+
660  l2capoutbuf[2] = 0x01; // Length = 0
+
661  l2capoutbuf[3] = credit; // Credit
+
662  l2capoutbuf[4] = calcFcs(l2capoutbuf);
+
663 #ifdef EXTRADEBUG
+
664  Notify(PSTR(" - RFCOMM Credit Data: "));
+
665  for(uint8_t i = 0; i < 5; i++) {
+
666  Serial.print(l2capoutbuf[i],HEX);
+
667  Notify(PSTR(" "));
+
668  }
+
669 #endif
+
670  RFCOMM_Command(l2capoutbuf,5);
+
671 }
+
672 
+
673 /* CRC on 2 bytes */
+
674 uint8_t SPP::__crc(uint8_t* data) {
+
675  return(pgm_read_byte(&rfcomm_crc_table[pgm_read_byte(&rfcomm_crc_table[0xff ^ data[0]]) ^ data[1]]));
+
676 }
+
677 
+
678 /* Calculate FCS - we never actually check if the host sends correct FCS to the Arduino */
+
679 uint8_t SPP::calcFcs(uint8_t *data) {
+
680  if((data[1] & 0xEF) == RFCOMM_UIH)
+
681  return (0xff - __crc(data)); // FCS on 2 bytes
+
682  else
+
683  return (0xff - pgm_read_byte(&rfcomm_crc_table[__crc(data) ^ data[2]])); // FCS on 3 bytes
+
684 }
+
685 
+
686 /* Serial commands */
+
687 void SPP::print(const String &str) {
+
688  if(!connected)
+
689  return;
+
690  uint8_t length = str.length();
+
691  if(length > (sizeof(l2capoutbuf)-4))
+
692  length = sizeof(l2capoutbuf)-4;
+
693  l2capoutbuf[0] = rfcommChannelConnection | 0 | 0 | extendAddress;; // RFCOMM Address
+
694  l2capoutbuf[1] = RFCOMM_UIH; // RFCOMM Control
+
695  l2capoutbuf[2] = length << 1 | 1; // Length
+
696  uint8_t i = 0;
+
697  for(; i < length; i++)
+
698  l2capoutbuf[i+3] = str[i];
+
699  l2capoutbuf[i+3] = calcFcs(l2capoutbuf);
+
700 
+
701  RFCOMM_Command(l2capoutbuf,length+4);
+
702 }
+
703 void SPP::print(const char* str) {
+
704  if(!connected)
+
705  return;
+
706  uint8_t length = strlen(str);
+
707  if(length > (sizeof(l2capoutbuf)-4))
+
708  length = sizeof(l2capoutbuf)-4;
+
709  l2capoutbuf[0] = rfcommChannelConnection | 0 | 0 | extendAddress;; // RFCOMM Address
+
710  l2capoutbuf[1] = RFCOMM_UIH; // RFCOMM Control
+
711  l2capoutbuf[2] = length << 1 | 1; // Length
+
712  uint8_t i = 0;
+
713  for(; i < length; i++)
+
714  l2capoutbuf[i+3] = str[i];
+
715  l2capoutbuf[i+3] = calcFcs(l2capoutbuf);
+
716 
+
717  RFCOMM_Command(l2capoutbuf,length+4);
+
718 }
+
719 void SPP::print(uint8_t data) {
+
720  print(&data,1);
+
721 }
+
722 void SPP::print(uint8_t* array, uint8_t length) {
+
723  if(!connected)
+
724  return;
+
725  if(length > (sizeof(l2capoutbuf)-4))
+
726  length = sizeof(l2capoutbuf)-4;
+
727  l2capoutbuf[0] = rfcommChannelConnection | 0 | 0 | extendAddress;; // RFCOMM Address
+
728  l2capoutbuf[1] = RFCOMM_UIH; // RFCOMM Control
+
729  l2capoutbuf[2] = length << 1 | 1; // Length
+
730  uint8_t i = 0;
+
731  for(; i < length; i++)
+
732  l2capoutbuf[i+3] = array[i];
+
733  l2capoutbuf[i+3] = calcFcs(l2capoutbuf);
+
734 
+
735  RFCOMM_Command(l2capoutbuf,length+4);
+
736 }
+
737 void SPP::print(const __FlashStringHelper *ifsh) {
+
738  const char PROGMEM *p = (const char PROGMEM *)ifsh;
+
739  size_t size = 0;
+
740  while (1) { // Calculate the size of the string
+
741  uint8_t c = pgm_read_byte(p+size);
+
742  if (c == 0)
+
743  break;
+
744  size++;
+
745  }
+
746  uint8_t buf[size];
+
747 
+
748  for(uint8_t i = 0; i < size; i++)
+
749  buf[i] = pgm_read_byte(p++);
+
750 
+
751  print(buf,size);
+
752 }
+
753 void SPP::println(const String &str) {
+
754  String output = str + "\r\n";
+
755  print(output);
+
756 }
+
757 void SPP::println(const char* str) {
+
758  char output[strlen(str)+3];
+
759  strcpy(output,str);
+
760  strcat(output,"\r\n");
+
761  print(output);
+
762 }
+
763 void SPP::println(uint8_t data) {
+
764  uint8_t buf[3] = {data, '\r', '\n'};
+
765  print(buf,3);
+
766 }
+
767 void SPP::println(uint8_t* array, uint8_t length) {
+
768  uint8_t buf[length+2];
+
769  memcpy(buf,array,length);
+
770  buf[length] = '\r';
+
771  buf[length+1] = '\n';
+
772  print(buf,length+2);
+
773 }
+
774 void SPP::println(const __FlashStringHelper *ifsh) {
+
775  const char PROGMEM *p = (const char PROGMEM *)ifsh;
+
776  size_t size = 0;
+
777  while (1) { // Calculate the size of the string
+
778  uint8_t c = pgm_read_byte(p+size);
+
779  if (c == 0)
+
780  break;
+
781  size++;
+
782  }
+
783  uint8_t buf[size+2];
+
784 
+
785  for(uint8_t i = 0; i < size; i++)
+
786  buf[i] = pgm_read_byte(p++);
+
787 
+
788  buf[size] = '\r';
+
789  buf[size+1] = '\n';
+
790  print(buf,size+2);
+
791 }
+
792 void SPP::println(void) {
+
793  uint8_t buf[2] = {'\r','\n'};
+
794  print(buf,2);
+
795 }
+
796 
+
797 /* These must be used to print numbers */
+
798 void SPP::printNumber(int32_t n) {
+
799  bool negative = false;
+
800  if(n < 0) {
+
801  negative = true;
+
802  n = -n;
+
803  }
+
804  uint32_t temp = n;
+
805  uint8_t digits = 0;
+
806  while (temp) {
+
807  temp /= 10;
+
808  digits++;
+
809  }
+
810  if(digits == 0)
+
811  print("0");
+
812  else {
+
813  uint8_t buf[digits+1]; // Add one extra in case it is negative
+
814  for(uint8_t i = 1; i < digits+1; i++) {
+
815  if(negative)
+
816  buf[digits-i+1] = n%10 + '0'; // Get number and convert to ASCII Character
+
817  else
+
818  buf[digits-i] = n%10 + '0'; // Get number and convert to ASCII Character
+
819  n /= 10;
+
820  }
+
821  if(negative) {
+
822  buf[0] = '-';
+
823  print(buf,digits+1);
+
824  } else
+
825  print(buf,digits);
+
826  }
+
827 }
+
828 void SPP::printNumberln(int32_t n) {
+
829  bool negative = false;
+
830  if(n < 0) {
+
831  negative = true;
+
832  n = -n;
+
833  }
+
834  uint32_t temp = n;
+
835  uint8_t digits = 0;
+
836  while (temp) {
+
837  temp /= 10;
+
838  digits++;
+
839  }
+
840  if(digits == 0)
+
841  print("0\r\n");
+
842  else {
+
843  uint8_t buf[digits+3]; // Add one extra in case it is negative
+
844  for(uint8_t i = 1; i < digits+1; i++) {
+
845  if(negative)
+
846  buf[digits-i+1] = n%10 + '0'; // Get number and convert to ASCII Character
+
847  else
+
848  buf[digits-i] = n%10 + '0'; // Get number and convert to ASCII Character
+
849  n /= 10;
+
850  }
+
851  if(negative) {
+
852  buf[0] = '-';
+
853  buf[digits+1] = '\r';
+
854  buf[digits+2] = '\n';
+
855  print(buf,digits+3);
+
856  } else {
+
857  buf[digits] = '\r';
+
858  buf[digits+1] = '\n';
+
859  print(buf,digits+2);
+
860  }
+
861  }
+
862 }
+
863 void SPP::printNumber(double n, uint8_t digits) {
+
864  char output[10];
+
865  doubleToString(n,output,digits);
+
866  print(output);
+
867 }
+
868 void SPP::printNumberln(double n, uint8_t digits) {
+
869  char buf[10];
+
870  char output[12];
+
871  doubleToString(n,buf,digits);
+
872  strcpy(output,buf);
+
873  strcat(output,"\r\n");
+
874  print(output);
+
875 }
+
876 void SPP::doubleToString(double input, char* output, uint8_t digits) {
+
877  char buffer[10];
+
878  if(input < 0) {
+
879  strcpy(output,"-");
+
880  input = -input;
+
881  }
+
882  else
+
883  strcpy(output,"");
+
884 
+
885  // Round correctly
+
886  double rounding = 0.5;
+
887  for (uint8_t i=0; i<digits; i++)
+
888  rounding /= 10.0;
+
889  input += rounding;
+
890 
+
891  unsigned long intpart = (unsigned long)input;
+
892  itoa(intpart,buffer,10); // Convert to string
+
893  strcat(output,buffer);
+
894  strcat(output,".");
+
895  double fractpart = (input-(double)intpart);
+
896  fractpart *= pow(10,digits);
+
897  for(uint8_t i=1;i<digits;i++) { // Put zeroes in front of number
+
898  if(fractpart < pow(10,digits-i)) {
+
899  strcat(output,"0");
+
900  }
+
901  }
+
902  itoa((unsigned long)fractpart,buffer,10); // Convert to string
+
903  strcat(output,buffer);
+
904 }
+
905 
+
906 uint8_t SPP::read() {
+
907  if(rfcommAvailable == 0) // Don't read if there is nothing in the buffer
+
908  return 0;
+
909  uint8_t output = rfcommDataBuffer[0];
+
910  for(uint8_t i = 1; i < rfcommAvailable; i++)
+
911  rfcommDataBuffer[i-1] = rfcommDataBuffer[i]; // Shift the buffer one left
+
912  rfcommAvailable--;
+
913  bytesRead++;
+
914  if(bytesRead > (sizeof(rfcommDataBuffer)-5)) { // We will send the command just before it runs out of credit
+
915  bytesRead = 0;
+
916  sendRfcommCredit(rfcommChannelConnection,rfcommDirection,0,RFCOMM_UIH,0x10,sizeof(rfcommDataBuffer)); // Send more credit
+
917 #ifdef EXTRADEBUG
+
918  Notify(PSTR("\r\nSent "));
+
919  Serial.print(sizeof(rfcommDataBuffer));
+
920  Notify(PSTR(" more credit"));
+
921 #endif
+
922  }
+
923  return output;
+
924 }
+
+ + + + diff --git a/_s_p_p_8h.html b/_s_p_p_8h.html index dce2a4a5..3febc5db 100644 --- a/_s_p_p_8h.html +++ b/_s_p_p_8h.html @@ -212,6 +212,8 @@ Macros
+

Definition at line 76 of file SPP.h.

+
@@ -224,6 +226,8 @@ Macros
+

Definition at line 77 of file SPP.h.

+
@@ -236,6 +240,8 @@ Macros
+

Definition at line 74 of file SPP.h.

+
@@ -248,6 +254,8 @@ Macros
+

Definition at line 75 of file SPP.h.

+
@@ -260,6 +268,8 @@ Macros
+

Definition at line 78 of file SPP.h.

+
@@ -272,6 +282,8 @@ Macros
+

Definition at line 79 of file SPP.h.

+
@@ -284,6 +296,8 @@ Macros
+

Definition at line 71 of file SPP.h.

+
@@ -296,6 +310,8 @@ Macros
+

Definition at line 51 of file SPP.h.

+
@@ -308,6 +324,8 @@ Macros
+

Definition at line 50 of file SPP.h.

+
@@ -320,6 +338,8 @@ Macros
+

Definition at line 53 of file SPP.h.

+
@@ -332,6 +352,8 @@ Macros
+

Definition at line 52 of file SPP.h.

+
@@ -344,6 +366,8 @@ Macros
+

Definition at line 49 of file SPP.h.

+
@@ -356,6 +380,8 @@ Macros
+

Definition at line 48 of file SPP.h.

+
@@ -368,6 +394,8 @@ Macros
+

Definition at line 55 of file SPP.h.

+
@@ -380,6 +408,8 @@ Macros
+

Definition at line 54 of file SPP.h.

+
@@ -392,6 +422,8 @@ Macros
+

Definition at line 28 of file SPP.h.

+
@@ -404,6 +436,8 @@ Macros
+

Definition at line 56 of file SPP.h.

+
@@ -416,6 +450,8 @@ Macros
+

Definition at line 40 of file SPP.h.

+
@@ -428,6 +464,8 @@ Macros
+

Definition at line 42 of file SPP.h.

+
@@ -440,6 +478,8 @@ Macros
+

Definition at line 39 of file SPP.h.

+
@@ -452,6 +492,8 @@ Macros
+

Definition at line 41 of file SPP.h.

+
@@ -464,6 +506,8 @@ Macros
+

Definition at line 38 of file SPP.h.

+
@@ -476,6 +520,8 @@ Macros
+

Definition at line 37 of file SPP.h.

+
@@ -488,6 +534,8 @@ Macros
+

Definition at line 45 of file SPP.h.

+
@@ -500,6 +548,8 @@ Macros
+

Definition at line 44 of file SPP.h.

+
@@ -512,6 +562,8 @@ Macros
+

Definition at line 43 of file SPP.h.

+
@@ -524,6 +576,8 @@ Macros
+

Definition at line 34 of file SPP.h.

+
@@ -536,6 +590,8 @@ Macros
+

Definition at line 32 of file SPP.h.

+
@@ -548,6 +604,8 @@ Macros
+

Definition at line 33 of file SPP.h.

+
@@ -560,6 +618,8 @@ Macros
+

Definition at line 31 of file SPP.h.

+
@@ -572,6 +632,8 @@ Macros
+

Definition at line 27 of file SPP.h.

+
@@ -584,6 +646,8 @@ Macros
+

Definition at line 25 of file SPP.h.

+
@@ -596,6 +660,8 @@ Macros
+

Definition at line 26 of file SPP.h.

+
@@ -608,6 +674,8 @@ Macros
+

Definition at line 24 of file SPP.h.

+
@@ -620,6 +688,8 @@ Macros
+

Definition at line 62 of file SPP.h.

+
@@ -632,6 +702,8 @@ Macros
+

Definition at line 69 of file SPP.h.

+
@@ -644,6 +716,8 @@ Macros
+

Definition at line 65 of file SPP.h.

+
@@ -656,6 +730,8 @@ Macros
+

Definition at line 66 of file SPP.h.

+
@@ -668,6 +744,8 @@ Macros
+

Definition at line 67 of file SPP.h.

+
@@ -680,6 +758,8 @@ Macros
+

Definition at line 59 of file SPP.h.

+
@@ -692,6 +772,8 @@ Macros
+

Definition at line 60 of file SPP.h.

+
@@ -704,12 +786,14 @@ Macros
+

Definition at line 61 of file SPP.h.

+
diff --git a/_s_p_p_8h_source.html b/_s_p_p_8h_source.html index fdf20ad2..79f8108f 100644 --- a/_s_p_p_8h_source.html +++ b/_s_p_p_8h_source.html @@ -179,112 +179,107 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
89 #define BT_RFCOMM_NSC_RSP 0x11
90 */
91 
-
92 class SPP : public BluetoothService {
-
93 public:
-
94  SPP(BTD *p, const char* name = "Arduino", const char* pin = "1234");
-
95 
-
96  // BluetoothService implementation
-
97  virtual void ACLData(uint8_t* ACLData); // Used to pass acldata to the services
-
98  virtual void Run(); // Used to establish the connection automatically
-
99  virtual void Reset(); // Use this to reset the service
-
100  virtual void disconnect(); // Used this void to disconnect the virtual serial port
-
101 
-
102  bool connected;// Variable used to indicate if the connection is established
-
103 
-
104  /* Serial port profile (SPP) commands */
-
105  void print(const String &); // Used to send strings
-
106  void print(const char* data); // Used to send strings
-
107  void print(uint8_t data); // Used to send single bytes
-
108  void print(uint8_t* array, uint8_t length); // Used to send arrays
-
109  void print(const __FlashStringHelper *); // Used to print strings stored in flash
-
110 
-
111  void println(const String &); // Include newline and carriage return
-
112  void println(const char* data); // Include newline and carriage return
-
113  void println(uint8_t data); // Include newline and carriage return
-
114  void println(uint8_t* array, uint8_t length); // Include newline and carriage return
-
115  void println(const __FlashStringHelper *); // Include newline and carriage return
-
116  void println(void); // Use this to print newline and carriage return
-
117 
-
118  void printNumber(int16_t n); // These must be used to print numbers
-
119  void printNumberln(int16_t n); // This will include newline and carriage return
-
120  void printNumber(double n, uint8_t digits = 2); // These must be used to print floating-point numbers
-
121  void printNumberln(double n, uint8_t digits = 2); // This will include newline and carriage return
-
122 
-
123  const char* doubleToString(double input, uint8_t digits); // Helper function to convert from double to string
-
124 
-
125  uint8_t available() { return rfcommAvailable; }; // Get the bytes waiting to be read
-
126  uint8_t read(); // Used to read the buffer
-
127  void flush() { rfcommAvailable = 0; }; // Discard all the bytes in the buffer
-
128 
-
129 private:
-
130  /* Bluetooth dongle library pointer */
-
131  BTD *pBtd;
-
132 
-
133  /* Set true when a channel is created */
-
134  bool SDPConnected;
-
135  bool RFCOMMConnected;
-
136 
-
137  uint16_t hci_handle; // The HCI Handle for the connection
-
138 
-
139  /* Variables used by L2CAP state maschines */
-
140  uint8_t l2cap_sdp_state;
-
141  uint8_t l2cap_rfcomm_state;
-
142  uint16_t l2cap_event_flag; // l2cap flags of received bluetooth events
-
143 
-
144  uint8_t l2capoutbuf[BULK_MAXPKTSIZE]; // General purpose buffer for l2cap out data
-
145  uint8_t rfcommbuf[10]; // Buffer for RFCOMM Commands
-
146 
-
147  /* L2CAP Channels */
-
148  uint8_t sdp_scid[2]; // L2CAP source CID for SDP
-
149  uint8_t sdp_dcid[2]; // 0x0050
-
150  uint8_t rfcomm_scid[2]; // L2CAP source CID for RFCOMM
-
151  uint8_t rfcomm_dcid[2]; // 0x0051
-
152  uint8_t identifier; // Identifier for command
-
153 
-
154  /* RFCOMM Variables */
-
155  uint8_t rfcommChannel;
-
156  uint8_t rfcommChannelConnection; // This is the channel the SPP chanel will be running at
-
157  uint8_t rfcommDirection;
-
158  uint8_t rfcommCommandResponse;
-
159  uint8_t rfcommChannelType;
-
160  uint8_t rfcommPfBit;
-
161 
-
162  unsigned long timer;
-
163  bool waitForLastCommand;
-
164  bool creditSent;
-
165 
-
166  uint8_t rfcommDataBuffer[100]; // Create a 100 sized buffer for incoming data
-
167  uint8_t rfcommAvailable;
-
168 
-
169  bool firstMessage; // Used to see if it's the first SDP request received
-
170  uint8_t bytesRead; // Counter to see when it's time to send more credit
-
171 
-
172  unsigned long printTimer; // Used to set a delay, so it doesn't try to print too fast
-
173 
-
174  /* State machines */
-
175  void SDP_task(); // SDP state machine
-
176  void RFCOMM_task(); // RFCOMM state machine
-
177 
-
178  /* SDP Commands */
-
179  void SDP_Command(uint8_t* data, uint8_t nbytes);
-
180  void serviceNotSupported(uint8_t transactionIDHigh, uint8_t transactionIDLow);
-
181  void serialPortResponse1(uint8_t transactionIDHigh, uint8_t transactionIDLow);
-
182  void serialPortResponse2(uint8_t transactionIDHigh, uint8_t transactionIDLow);
-
183  void l2capResponse1(uint8_t transactionIDHigh, uint8_t transactionIDLow);
-
184  void l2capResponse2(uint8_t transactionIDHigh, uint8_t transactionIDLow);
-
185 
-
186  /* RFCOMM Commands */
-
187  void RFCOMM_Command(uint8_t* data, uint8_t nbytes);
-
188  void sendRfcomm(uint8_t channel, uint8_t direction, uint8_t CR, uint8_t channelType, uint8_t pfBit, uint8_t* data, uint8_t length);
-
189  void sendRfcommCredit(uint8_t channel, uint8_t direction, uint8_t CR, uint8_t channelType, uint8_t pfBit, uint8_t credit);
-
190  uint8_t calcFcs(uint8_t *data);
-
191  uint8_t __crc(uint8_t* data);
-
192 };
-
193 #endif
+
93 class SPP : public BluetoothService {
+
94 public:
+
101  SPP(BTD *p, const char* name = "Arduino", const char* pin = "1234");
+
102 
+
108  virtual void ACLData(uint8_t* ACLData);
+
110  virtual void Run();
+
112  virtual void Reset();
+
114  virtual void disconnect();
+
118  bool connected;
+
119 
+
126  void print(const String &str);
+
131  void println(const String &str);
+
136  void print(const char* str);
+
141  void println(const char* str);
+
146  void print(uint8_t data);
+
151  void println(uint8_t data);
+
157  void print(uint8_t* array, uint8_t length);
+
163  void println(uint8_t* array, uint8_t length);
+
168  void print(const __FlashStringHelper *ifsh);
+
173  void println(const __FlashStringHelper *ifsh);
+
175  void println(void);
+
176 
+
181  void printNumber(int32_t n);
+
186  void printNumberln(int32_t n);
+
192  void printNumber(double n, uint8_t digits = 2);
+
198  void printNumberln(double n, uint8_t digits = 2);
+
199 
+
206  void doubleToString(double input, char* output, uint8_t digits = 2);
+
207 
+
212  uint8_t available() { return rfcommAvailable; };
+
217  uint8_t read();
+
219  void flush() { rfcommAvailable = 0; };
+
222 private:
+
223  /* Bluetooth dongle library pointer */
+
224  BTD *pBtd;
+
225 
+
226  /* Set true when a channel is created */
+
227  bool SDPConnected;
+
228  bool RFCOMMConnected;
+
229 
+
230  uint16_t hci_handle; // The HCI Handle for the connection
+
231 
+
232  /* Variables used by L2CAP state maschines */
+
233  uint8_t l2cap_sdp_state;
+
234  uint8_t l2cap_rfcomm_state;
+
235  uint16_t l2cap_event_flag; // l2cap flags of received bluetooth events
+
236 
+
237  uint8_t l2capoutbuf[BULK_MAXPKTSIZE]; // General purpose buffer for l2cap out data
+
238  uint8_t rfcommbuf[10]; // Buffer for RFCOMM Commands
+
239 
+
240  /* L2CAP Channels */
+
241  uint8_t sdp_scid[2]; // L2CAP source CID for SDP
+
242  uint8_t sdp_dcid[2]; // 0x0050
+
243  uint8_t rfcomm_scid[2]; // L2CAP source CID for RFCOMM
+
244  uint8_t rfcomm_dcid[2]; // 0x0051
+
245  uint8_t identifier; // Identifier for command
+
246 
+
247  /* RFCOMM Variables */
+
248  uint8_t rfcommChannel;
+
249  uint8_t rfcommChannelConnection; // This is the channel the SPP chanel will be running at
+
250  uint8_t rfcommDirection;
+
251  uint8_t rfcommCommandResponse;
+
252  uint8_t rfcommChannelType;
+
253  uint8_t rfcommPfBit;
+
254 
+
255  unsigned long timer;
+
256  bool waitForLastCommand;
+
257  bool creditSent;
+
258 
+
259  uint8_t rfcommDataBuffer[100]; // Create a 100 sized buffer for incoming data
+
260  uint8_t rfcommAvailable;
+
261 
+
262  bool firstMessage; // Used to see if it's the first SDP request received
+
263  uint8_t bytesRead; // Counter to see when it's time to send more credit
+
264 
+
265  unsigned long printTimer; // Used to set a delay, so it doesn't try to print too fast
+
266 
+
267  /* State machines */
+
268  void SDP_task(); // SDP state machine
+
269  void RFCOMM_task(); // RFCOMM state machine
+
270 
+
271  /* SDP Commands */
+
272  void SDP_Command(uint8_t* data, uint8_t nbytes);
+
273  void serviceNotSupported(uint8_t transactionIDHigh, uint8_t transactionIDLow);
+
274  void serialPortResponse1(uint8_t transactionIDHigh, uint8_t transactionIDLow);
+
275  void serialPortResponse2(uint8_t transactionIDHigh, uint8_t transactionIDLow);
+
276  void l2capResponse1(uint8_t transactionIDHigh, uint8_t transactionIDLow);
+
277  void l2capResponse2(uint8_t transactionIDHigh, uint8_t transactionIDLow);
+
278 
+
279  /* RFCOMM Commands */
+
280  void RFCOMM_Command(uint8_t* data, uint8_t nbytes);
+
281  void sendRfcomm(uint8_t channel, uint8_t direction, uint8_t CR, uint8_t channelType, uint8_t pfBit, uint8_t* data, uint8_t length);
+
282  void sendRfcommCredit(uint8_t channel, uint8_t direction, uint8_t CR, uint8_t channelType, uint8_t pfBit, uint8_t credit);
+
283  uint8_t calcFcs(uint8_t *data);
+
284  uint8_t __crc(uint8_t* data);
+
285 };
+
286 #endif
diff --git a/_u_s_b__desc_2pgmstrings_8h.html b/_u_s_b__desc_2pgmstrings_8h.html index 40764c57..b59bef0b 100644 --- a/_u_s_b__desc_2pgmstrings_8h.html +++ b/_u_s_b__desc_2pgmstrings_8h.html @@ -119,6 +119,8 @@ Variables
+

Definition at line 6 of file pgmstrings.h.

+
@@ -135,6 +137,8 @@ Variables
+

Definition at line 5 of file pgmstrings.h.

+
@@ -151,6 +155,8 @@ Variables
+

Definition at line 4 of file pgmstrings.h.

+

Variable Documentation

@@ -164,12 +170,14 @@ Variables
+

Definition at line 10 of file pgmstrings.h.

+
diff --git a/_u_s_b__desc_2pgmstrings_8h_source.html b/_u_s_b__desc_2pgmstrings_8h_source.html index c71e6101..56a8af94 100644 --- a/_u_s_b__desc_2pgmstrings_8h_source.html +++ b/_u_s_b__desc_2pgmstrings_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/_usb_8cpp.html b/_usb_8cpp.html index 103e7b89..0e2a9ae2 100644 --- a/_usb_8cpp.html +++ b/_usb_8cpp.html @@ -100,10 +100,12 @@ Include dependency graph for Usb.cpp: - + +

Go to the source code of this file.

+ diff --git a/_usb_8cpp_source.html b/_usb_8cpp_source.html new file mode 100644 index 00000000..2aae256b --- /dev/null +++ b/_usb_8cpp_source.html @@ -0,0 +1,741 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/Usb.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Usb.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
+
2 
+
3 This software may be distributed and modified under the terms of the GNU
+
4 General Public License version 2 (GPL2) as published by the Free Software
+
5 Foundation and appearing in the file GPL2.TXT included in the packaging of
+
6 this file. Please note that GPL2 Section 2[b] requires that all works based
+
7 on this software must also be made publicly available under the terms of
+
8 the GPL2 ("Copyleft").
+
9 
+
10 Contact information
+
11 -------------------
+
12 
+
13 Circuits At Home, LTD
+
14 Web : http://www.circuitsathome.com
+
15 e-mail : support@circuitsathome.com
+
16 */
+
17 /* USB functions */
+
18 
+
19 #include "avrpins.h"
+
20 #include "max3421e.h"
+
21 #include "usbhost.h"
+
22 #include "Usb.h"
+
23 
+
24 #if defined(ARDUINO) && ARDUINO >=100
+
25 #include "Arduino.h"
+
26 #else
+
27 #include <WProgram.h>
+
28 #endif
+
29 
+
30 static uint8_t usb_error = 0;
+
31 static uint8_t usb_task_state;
+
32 
+
33 /* constructor */
+
34 USB::USB () : bmHubPre(0)
+
35 {
+
36  usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE; //set up state machine
+
37  init();
+
38 }
+
39 
+
40 /* Initialize data structures */
+
41 void USB::init()
+
42 {
+
43  devConfigIndex = 0;
+
44  bmHubPre = 0;
+
45 }
+
46 
+
47 uint8_t USB::getUsbTaskState( void )
+
48 {
+
49  return( usb_task_state );
+
50 }
+
51 
+
52 void USB::setUsbTaskState( uint8_t state )
+
53 {
+
54  usb_task_state = state;
+
55 }
+
56 
+
57 EpInfo* USB::getEpInfoEntry( uint8_t addr, uint8_t ep )
+
58 {
+
59  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
+
60 
+
61  if (!p || !p->epinfo)
+
62  return NULL;
+
63 
+
64  EpInfo *pep = p->epinfo;
+
65 
+
66  for (uint8_t i=0; i<p->epcount; i++)
+
67  {
+
68  if ((pep)->epAddr == ep)
+
69  return pep;
+
70 
+
71  pep ++;
+
72  }
+
73  return NULL;
+
74 }
+
75 
+
76 /* set device table entry */
+
77 /* each device is different and has different number of endpoints. This function plugs endpoint record structure, defined in application, to devtable */
+
78 uint8_t USB::setEpInfoEntry( uint8_t addr, uint8_t epcount, EpInfo* eprecord_ptr )
+
79 {
+
80  if (!eprecord_ptr)
+ +
82 
+
83  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
+
84 
+
85  if (!p)
+ +
87 
+
88  p->address = addr;
+
89  p->epinfo = eprecord_ptr;
+
90  p->epcount = epcount;
+
91 
+
92  return 0;
+
93 }
+
94 
+
95 uint8_t USB::SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t &nak_limit)
+
96 {
+
97  UsbDevice *p = addrPool.GetUsbDevicePtr(addr);
+
98 
+
99  if (!p)
+ +
101 
+
102  if (!p->epinfo)
+ +
104 
+
105  *ppep = getEpInfoEntry(addr, ep);
+
106 
+
107  if (!*ppep)
+ +
109 
+
110  nak_limit = (0x0001UL << ( ( (*ppep)->bmNakPower > USB_NAK_MAX_POWER ) ? USB_NAK_MAX_POWER : (*ppep)->bmNakPower) );
+
111  nak_limit--;
+
112 
+
113 /*
+
114  USBTRACE2("\r\nAddress: ", addr);
+
115  USBTRACE2(" EP: ", ep);
+
116  USBTRACE2(" NAK Power: ",(*ppep)->bmNakPower);
+
117  USBTRACE2(" NAK Limit: ", nak_limit);
+
118  USBTRACE("\r\n");
+
119 */
+
120  regWr( rPERADDR, addr ); //set peripheral address
+
121 
+
122  uint8_t mode = regRd( rMODE );
+
123 
+
124  // Set bmLOWSPEED and bmHUBPRE in case of low-speed device, reset them otherwise
+
125  regWr( rMODE, (p->lowspeed) ? mode | bmLOWSPEED | bmHubPre : mode & ~(bmHUBPRE | bmLOWSPEED));
+
126 
+
127  return 0;
+
128 }
+
129 
+
130 /* Control transfer. Sets address, endpoint, fills control packet with necessary data, dispatches control packet, and initiates bulk IN transfer, */
+
131 /* depending on request. Actual requests are defined as inlines */
+
132 /* return codes: */
+
133 /* 00 = success */
+
134 /* 01-0f = non-zero HRSLT */
+
135 uint8_t USB::ctrlReq( uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi,
+
136  uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t* dataptr, USBReadParser *p)
+
137 {
+
138  boolean direction = false; //request direction, IN or OUT
+
139  uint8_t rcode;
+
140  SETUP_PKT setup_pkt;
+
141 
+
142  EpInfo *pep = NULL;
+
143  uint16_t nak_limit;
+
144 
+
145  rcode = SetAddress(addr, ep, &pep, nak_limit);
+
146 
+
147  if (rcode)
+
148  return rcode;
+
149 
+
150  direction = (( bmReqType & 0x80 ) > 0);
+
151 
+
152  /* fill in setup packet */
+
153  setup_pkt.ReqType_u.bmRequestType = bmReqType;
+
154  setup_pkt.bRequest = bRequest;
+
155  setup_pkt.wVal_u.wValueLo = wValLo;
+
156  setup_pkt.wVal_u.wValueHi = wValHi;
+
157  setup_pkt.wIndex = wInd;
+
158  setup_pkt.wLength = total;
+
159 
+
160  bytesWr( rSUDFIFO, 8, (uint8_t*)&setup_pkt ); //transfer to setup packet FIFO
+
161 
+
162  rcode = dispatchPkt( tokSETUP, ep, nak_limit ); //dispatch packet
+
163 
+
164  if( rcode ) //return HRSLT if not zero
+
165  return( rcode );
+
166 
+
167  if( dataptr != NULL ) //data stage, if present
+
168  {
+
169  if( direction ) //IN transfer
+
170  {
+
171  uint16_t left = total;
+
172 
+
173  pep->bmRcvToggle = 1; //bmRCVTOG1;
+
174 
+
175  while (left)
+
176  {
+
177  // Bytes read into buffer
+
178  uint16_t read = nbytes;
+
179  //uint16_t read = (left<nbytes) ? left : nbytes;
+
180 
+
181  rcode = InTransfer( pep, nak_limit, &read, dataptr );
+
182 
+
183  if (rcode)
+
184  return rcode;
+
185 
+
186  // Invoke callback function if inTransfer completed successfuly and callback function pointer is specified
+
187  if (!rcode && p)
+
188  ((USBReadParser*)p)->Parse( read, dataptr, total - left );
+
189 
+
190  left -= read;
+
191 
+
192  if (read < nbytes)
+
193  break;
+
194  }
+
195  }
+
196  else //OUT transfer
+
197  {
+
198  pep->bmSndToggle = 1; //bmSNDTOG1;
+
199  rcode = OutTransfer( pep, nak_limit, nbytes, dataptr );
+
200  }
+
201  if( rcode ) //return error
+
202  return( rcode );
+
203  }
+
204  // Status stage
+
205  return dispatchPkt( (direction) ? tokOUTHS : tokINHS, ep, nak_limit ); //GET if direction
+
206 }
+
207 
+
208 /* IN transfer to arbitrary endpoint. Assumes PERADDR is set. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
+
209 /* Keep sending INs and writes data to memory area pointed by 'data' */
+
210 /* rcode 0 if no errors. rcode 01-0f is relayed from dispatchPkt(). Rcode f0 means RCVDAVIRQ error,
+
211  fe USB xfer timeout */
+
212 uint8_t USB::inTransfer( uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data)
+
213 {
+
214  EpInfo *pep = NULL;
+
215  uint16_t nak_limit = 0;
+
216 
+
217  uint8_t rcode = SetAddress(addr, ep, &pep, nak_limit);
+
218 
+
219  if (rcode)
+
220  return rcode;
+
221 
+
222  return InTransfer(pep, nak_limit, nbytesptr, data);
+
223 }
+
224 
+
225 uint8_t USB::InTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t* data)
+
226 {
+
227  uint8_t rcode = 0;
+
228  uint8_t pktsize;
+
229 
+
230  uint16_t nbytes = *nbytesptr;
+
231  uint8_t maxpktsize = pep->maxPktSize;
+
232 
+
233  *nbytesptr = 0;
+
234  regWr( rHCTL, (pep->bmRcvToggle) ? bmRCVTOG1 : bmRCVTOG0 ); //set toggle value
+
235 
+
236  while( 1 ) // use a 'return' to exit this loop
+
237  {
+
238  rcode = dispatchPkt( tokIN, pep->epAddr, nak_limit ); //IN packet to EP-'endpoint'. Function takes care of NAKS.
+
239 
+
240  if( rcode )
+
241  return( rcode ); //should be 0, indicating ACK. Else return error code.
+
242 
+
243  /* check for RCVDAVIRQ and generate error if not present */
+
244  /* the only case when absense of RCVDAVIRQ makes sense is when toggle error occured. Need to add handling for that */
+
245  if(( regRd( rHIRQ ) & bmRCVDAVIRQ ) == 0 )
+
246  return ( 0xf0 ); //receive error
+
247 
+
248  pktsize = regRd( rRCVBC ); //number of received bytes
+
249 
+
250  assert(pktsize <= nbytes);
+
251 
+
252  int16_t mem_left = (int16_t)nbytes - *((int16_t*)nbytesptr);
+
253 
+
254  if (mem_left < 0)
+
255  mem_left = 0;
+
256 
+
257  data = bytesRd( rRCVFIFO, ((pktsize > mem_left) ? mem_left : pktsize), data );
+
258 
+
259  regWr( rHIRQ, bmRCVDAVIRQ ); // Clear the IRQ & free the buffer
+
260  *nbytesptr += pktsize; // add this packet's byte count to total transfer length
+
261 
+
262  /* The transfer is complete under two conditions: */
+
263  /* 1. The device sent a short packet (L.T. maxPacketSize) */
+
264  /* 2. 'nbytes' have been transferred. */
+
265  if (( pktsize < maxpktsize ) || (*nbytesptr >= nbytes )) // have we transferred 'nbytes' bytes?
+
266  {
+
267  // Save toggle value
+
268  pep->bmRcvToggle = (( regRd( rHRSL ) & bmRCVTOGRD )) ? 1 : 0;
+
269 
+
270  return( 0 );
+
271  } // if
+
272  } //while( 1 )
+
273 }
+
274 
+
275 /* OUT transfer to arbitrary endpoint. Handles multiple packets if necessary. Transfers 'nbytes' bytes. */
+
276 /* Handles NAK bug per Maxim Application Note 4000 for single buffer transfer */
+
277 /* rcode 0 if no errors. rcode 01-0f is relayed from HRSL */
+
278 uint8_t USB::outTransfer( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data )
+
279 {
+
280  EpInfo *pep = NULL;
+
281  uint16_t nak_limit;
+
282 
+
283  uint8_t rcode = SetAddress(addr, ep, &pep, nak_limit);
+
284 
+
285  if (rcode)
+
286  return rcode;
+
287 
+
288  return OutTransfer(pep, nak_limit, nbytes, data);
+
289 }
+
290 
+
291 uint8_t USB::OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data)
+
292 {
+
293  uint8_t rcode, retry_count;
+
294  uint8_t *data_p = data; //local copy of the data pointer
+
295  uint16_t bytes_tosend, nak_count;
+
296  uint16_t bytes_left = nbytes;
+
297 
+
298  uint8_t maxpktsize = pep->maxPktSize;
+
299 
+
300  if (maxpktsize < 1 || maxpktsize > 64)
+ +
302 
+
303  unsigned long timeout = millis() + USB_XFER_TIMEOUT;
+
304 
+
305  regWr( rHCTL, (pep->bmSndToggle) ? bmSNDTOG1 : bmSNDTOG0 ); //set toggle value
+
306 
+
307  while( bytes_left )
+
308  {
+
309  retry_count = 0;
+
310  nak_count = 0;
+
311  bytes_tosend = ( bytes_left >= maxpktsize ) ? maxpktsize : bytes_left;
+
312  bytesWr( rSNDFIFO, bytes_tosend, data_p ); //filling output FIFO
+
313  regWr( rSNDBC, bytes_tosend ); //set number of bytes
+
314  regWr( rHXFR, ( tokOUT | pep->epAddr )); //dispatch packet
+
315  while(!(regRd( rHIRQ ) & bmHXFRDNIRQ )); //wait for the completion IRQ
+
316  regWr( rHIRQ, bmHXFRDNIRQ ); //clear IRQ
+
317  rcode = ( regRd( rHRSL ) & 0x0f );
+
318 
+
319  while( rcode && ( timeout > millis()))
+
320  {
+
321  switch( rcode )
+
322  {
+
323  case hrNAK:
+
324  nak_count ++;
+
325  if( nak_limit && ( nak_count == nak_limit ))
+
326  return( rcode );
+
327  break;
+
328  case hrTIMEOUT:
+
329  retry_count ++;
+
330  if( retry_count == USB_RETRY_LIMIT )
+
331  return( rcode );
+
332  break;
+
333  default:
+
334  return( rcode );
+
335  }//switch( rcode
+
336 
+
337  /* process NAK according to Host out NAK bug */
+
338  regWr( rSNDBC, 0 );
+
339  regWr( rSNDFIFO, *data_p );
+
340  regWr( rSNDBC, bytes_tosend );
+
341  regWr( rHXFR, ( tokOUT | pep->epAddr )); //dispatch packet
+
342  while(!(regRd( rHIRQ ) & bmHXFRDNIRQ )); //wait for the completion IRQ
+
343  regWr( rHIRQ, bmHXFRDNIRQ ); //clear IRQ
+
344  rcode = ( regRd( rHRSL ) & 0x0f );
+
345  }//while( rcode && ....
+
346  bytes_left -= bytes_tosend;
+
347  data_p += bytes_tosend;
+
348  }//while( bytes_left...
+
349  pep->bmSndToggle = ( regRd( rHRSL ) & bmSNDTOGRD ) ? 1 : 0; //bmSNDTOG1 : bmSNDTOG0; //update toggle
+
350  return( rcode ); //should be 0 in all cases
+
351 }
+
352 /* dispatch usb packet. Assumes peripheral address is set and relevant buffer is loaded/empty */
+
353 /* If NAK, tries to re-send up to nak_limit times */
+
354 /* If nak_limit == 0, do not count NAKs, exit after timeout */
+
355 /* If bus timeout, re-sends up to USB_RETRY_LIMIT times */
+
356 /* return codes 0x00-0x0f are HRSLT( 0x00 being success ), 0xff means timeout */
+
357 uint8_t USB::dispatchPkt( uint8_t token, uint8_t ep, uint16_t nak_limit )
+
358 {
+
359  unsigned long timeout = millis() + USB_XFER_TIMEOUT;
+
360  uint8_t tmpdata;
+
361  uint8_t rcode;
+
362  uint8_t retry_count = 0;
+
363  uint16_t nak_count = 0;
+
364 
+
365  while( timeout > millis() )
+
366  {
+
367  regWr( rHXFR, ( token|ep )); //launch the transfer
+ +
369 
+
370  while( millis() < timeout ) //wait for transfer completion
+
371  {
+
372  tmpdata = regRd( rHIRQ );
+
373 
+
374  if( tmpdata & bmHXFRDNIRQ )
+
375  {
+
376  regWr( rHIRQ, bmHXFRDNIRQ ); //clear the interrupt
+
377  rcode = 0x00;
+
378  break;
+
379  }//if( tmpdata & bmHXFRDNIRQ
+
380 
+
381  }//while ( millis() < timeout
+
382 
+
383  if( rcode != 0x00 ) //exit if timeout
+
384  return( rcode );
+
385 
+
386  rcode = ( regRd( rHRSL ) & 0x0f ); //analyze transfer result
+
387 
+
388  switch( rcode )
+
389  {
+
390  case hrNAK:
+
391  nak_count ++;
+
392  if( nak_limit && ( nak_count == nak_limit ))
+
393  return( rcode );
+
394  //delay(1);
+
395  break;
+
396  case hrTIMEOUT:
+
397  retry_count ++;
+
398  if( retry_count == USB_RETRY_LIMIT )
+
399  return( rcode );
+
400  break;
+
401  default:
+
402  return( rcode );
+
403  }//switch( rcode
+
404 
+
405  }//while( timeout > millis()
+
406  return( rcode );
+
407 }
+
408 
+
409 /* USB main task. Performs enumeration/cleanup */
+
410 void USB::Task( void ) //USB state machine
+
411 {
+
412  uint8_t rcode;
+
413  uint8_t tmpdata;
+
414  static unsigned long delay = 0;
+ +
416  bool lowspeed = false;
+
417 
+
418  MAX3421E::Task();
+
419 
+
420  tmpdata = getVbusState();
+
421 
+
422  /* modify USB task state if Vbus changed */
+
423  switch( tmpdata )
+
424  {
+
425  case SE1: //illegal state
+
426  usb_task_state = USB_DETACHED_SUBSTATE_ILLEGAL;
+
427  lowspeed = false;
+
428  break;
+
429  case SE0: //disconnected
+
430  if(( usb_task_state & USB_STATE_MASK ) != USB_STATE_DETACHED )
+
431  usb_task_state = USB_DETACHED_SUBSTATE_INITIALIZE;
+
432  lowspeed = false;
+
433  break;
+
434  case LSHOST:
+
435  lowspeed = true;
+
436  case FSHOST: //attached
+
437  if(( usb_task_state & USB_STATE_MASK ) == USB_STATE_DETACHED )
+
438  {
+
439  delay = millis() + USB_SETTLE_DELAY;
+
440  usb_task_state = USB_ATTACHED_SUBSTATE_SETTLE;
+
441  }
+
442  break;
+
443  }// switch( tmpdata
+
444 
+
445  for (uint8_t i=0; i<USB_NUMDEVICES; i++)
+
446  if (devConfig[i])
+
447  rcode = devConfig[i]->Poll();
+
448 
+
449  switch( usb_task_state ) {
+ +
451  init();
+
452 
+
453  for (uint8_t i=0; i<USB_NUMDEVICES; i++)
+
454  if (devConfig[i])
+
455  rcode = devConfig[i]->Release();
+
456 
+
457  usb_task_state = USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE;
+
458  break;
+
459  case USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE: //just sit here
+
460  break;
+
461  case USB_DETACHED_SUBSTATE_ILLEGAL: //just sit here
+
462  break;
+
463  case USB_ATTACHED_SUBSTATE_SETTLE: //setlle time for just attached device
+
464  if( delay < millis() )
+
465  usb_task_state = USB_ATTACHED_SUBSTATE_RESET_DEVICE;
+
466  break;
+ +
468  regWr( rHCTL, bmBUSRST ); //issue bus reset
+ +
470  break;
+ +
472  if(( regRd( rHCTL ) & bmBUSRST ) == 0 )
+
473  {
+
474  tmpdata = regRd( rMODE ) | bmSOFKAENAB; //start SOF generation
+
475  regWr( rMODE, tmpdata );
+
476  usb_task_state = USB_ATTACHED_SUBSTATE_WAIT_SOF;
+
477  delay = millis() + 20; //20ms wait after reset per USB spec
+
478  }
+
479  break;
+
480  case USB_ATTACHED_SUBSTATE_WAIT_SOF: //todo: change check order
+
481  if( regRd( rHIRQ ) & bmFRAMEIRQ ) //when first SOF received we can continue
+
482  {
+
483  if( delay < millis() ) //20ms passed
+
484  usb_task_state = USB_STATE_CONFIGURING;
+
485  }
+
486  break;
+ +
488  rcode = Configuring(0, 0, lowspeed);
+
489 
+
490  if (rcode)
+
491  {
+ +
493  {
+
494  usb_error = rcode;
+
495  usb_task_state = USB_STATE_ERROR;
+
496  }
+
497  }
+
498  else
+
499  usb_task_state = USB_STATE_RUNNING;
+
500  break;
+
501  case USB_STATE_RUNNING:
+
502  break;
+
503  case USB_STATE_ERROR:
+
504  break;
+
505  } // switch( usb_task_state )
+
506 }
+
507 
+
508 uint8_t USB::DefaultAddressing(uint8_t parent, uint8_t port, bool lowspeed)
+
509 {
+
510  uint8_t buf[12];
+
511  uint8_t rcode;
+
512  UsbDevice *p0 = NULL, *p = NULL;
+
513 
+
514  // Get pointer to pseudo device with address 0 assigned
+
515  p0 = addrPool.GetUsbDevicePtr(0);
+
516 
+
517  if (!p0)
+ +
519 
+
520  if (!p0->epinfo)
+ +
522 
+
523  p0->lowspeed = (lowspeed) ? true : false;
+
524 
+
525  // Allocate new address according to device class
+
526  uint8_t bAddress = addrPool.AllocAddress(parent, false, port);
+
527 
+
528  if (!bAddress)
+ +
530 
+
531  p = addrPool.GetUsbDevicePtr(bAddress);
+
532 
+
533  if (!p)
+ +
535 
+
536  p->lowspeed = lowspeed;
+
537 
+
538  // Assign new address to the device
+
539  rcode = setAddr( 0, 0, bAddress );
+
540 
+
541  if (rcode)
+
542  {
+
543  addrPool.FreeAddress(bAddress);
+
544  bAddress = 0;
+
545  return rcode;
+
546  }
+
547  return 0;
+
548 };
+
549 
+
550 uint8_t USB::Configuring(uint8_t parent, uint8_t port, bool lowspeed)
+
551 {
+
552  static uint8_t dev_index = 0;
+
553  uint8_t rcode = 0;
+
554 
+
555  for (; devConfigIndex<USB_NUMDEVICES; devConfigIndex++)
+
556  {
+
557  if (!devConfig[devConfigIndex])
+
558  continue;
+
559 
+
560  rcode = devConfig[devConfigIndex]->Init(parent, port, lowspeed);
+
561 
+
562  if (!rcode)
+
563  {
+
564  devConfigIndex = 0;
+
565  return 0;
+
566  }
+ +
568  {
+
569  // in case of an error dev_index should be reset to 0
+
570  // in order to start from the very beginning the
+
571  // next time the program gets here
+ +
573  devConfigIndex = 0;
+
574 
+
575  return rcode;
+
576  }
+
577  }
+
578  // if we get here that means that the device class is not supported by any of registered classes
+
579  devConfigIndex = 0;
+
580 
+
581  rcode = DefaultAddressing(parent, port, lowspeed);
+
582 
+
583  return rcode;
+
584 }
+
585 
+
586 uint8_t USB::ReleaseDevice(uint8_t addr)
+
587 {
+
588  if (!addr)
+
589  return 0;
+
590 
+
591  for (uint8_t i=0; i<USB_NUMDEVICES; i++)
+
592  if (devConfig[i]->GetAddress() == addr)
+
593  return devConfig[i]->Release();
+
594 }
+
595 
+
596 #if 1
+
597 //get device descriptor
+
598 uint8_t USB::getDevDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr )
+
599 {
+
600  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, USB_DESCRIPTOR_DEVICE, 0x0000, nbytes, nbytes, dataptr, NULL ));
+
601 }
+
602 //get configuration descriptor
+
603 uint8_t USB::getConfDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr )
+
604 {
+
605  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, nbytes, nbytes, dataptr, NULL ));
+
606 }
+
607 
+
608 uint8_t USB::getConfDescr( uint8_t addr, uint8_t ep, uint8_t conf, USBReadParser *p )
+
609 {
+
610  const uint8_t bufSize = 64;
+
611  uint8_t buf[bufSize];
+
612 
+
613  uint8_t ret = getConfDescr( addr, ep, 8, conf, buf );
+
614 
+
615  if (ret)
+
616  return ret;
+
617 
+
618  uint16_t total = ((USB_CONFIGURATION_DESCRIPTOR*)buf)->wTotalLength;
+
619  delay(100);
+
620  //USBTRACE2("\r\ntotal conf.size:", total);
+
621 
+
622  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, total, bufSize, buf, p ));
+
623 }
+
624 
+
625 //get string descriptor
+
626 uint8_t USB::getStrDescr( uint8_t addr, uint8_t ep, uint16_t ns, uint8_t index, uint16_t langid, uint8_t* dataptr )
+
627 {
+
628  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, index, USB_DESCRIPTOR_STRING, langid, ns, ns, dataptr, NULL ));
+
629 }
+
630 //set address
+
631 uint8_t USB::setAddr( uint8_t oldaddr, uint8_t ep, uint8_t newaddr )
+
632 {
+
633  return( ctrlReq( oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL ));
+
634 }
+
635 //set configuration
+
636 uint8_t USB::setConf( uint8_t addr, uint8_t ep, uint8_t conf_value )
+
637 {
+
638  return( ctrlReq( addr, ep, bmREQ_SET, USB_REQUEST_SET_CONFIGURATION, conf_value, 0x00, 0x0000, 0x0000, 0x0000, NULL, NULL ));
+
639 }
+
640 
+
641 #endif // defined(USB_METHODS_INLINE)
+
642 
+
+ + + + diff --git a/_usb_8h.html b/_usb_8h.html index a57dcc07..56250316 100644 --- a/_usb_8h.html +++ b/_usb_8h.html @@ -115,7 +115,7 @@ This graph shows which files directly or indirectly include this file:
- +

Go to the source code of this file.

@@ -264,6 +264,8 @@ Typedefs
+

Definition at line 75 of file Usb.h.

+
@@ -276,6 +278,8 @@ Typedefs
+

Definition at line 73 of file Usb.h.

+
@@ -288,6 +292,8 @@ Typedefs
+

Definition at line 74 of file Usb.h.

+
@@ -300,6 +306,8 @@ Typedefs
+

Definition at line 132 of file Usb.h.

+
@@ -312,6 +320,8 @@ Typedefs
+

Definition at line 145 of file Usb.h.

+
@@ -324,6 +334,8 @@ Typedefs
+

Definition at line 142 of file Usb.h.

+
@@ -336,6 +348,8 @@ Typedefs
+

Definition at line 141 of file Usb.h.

+
@@ -348,6 +362,8 @@ Typedefs
+

Definition at line 143 of file Usb.h.

+
@@ -360,6 +376,8 @@ Typedefs
+

Definition at line 144 of file Usb.h.

+
@@ -372,6 +390,8 @@ Typedefs
+

Definition at line 99 of file Usb.h.

+
@@ -384,6 +404,8 @@ Typedefs
+

Definition at line 83 of file Usb.h.

+
@@ -396,6 +418,8 @@ Typedefs
+

Definition at line 91 of file Usb.h.

+
@@ -408,6 +432,8 @@ Typedefs
+

Definition at line 84 of file Usb.h.

+
@@ -420,6 +446,8 @@ Typedefs
+

Definition at line 93 of file Usb.h.

+
@@ -432,6 +460,8 @@ Typedefs
+

Definition at line 96 of file Usb.h.

+
@@ -444,6 +474,8 @@ Typedefs
+

Definition at line 85 of file Usb.h.

+
@@ -456,6 +488,8 @@ Typedefs
+

Definition at line 90 of file Usb.h.

+
@@ -468,6 +502,8 @@ Typedefs
+

Definition at line 87 of file Usb.h.

+
@@ -480,6 +516,8 @@ Typedefs
+

Definition at line 89 of file Usb.h.

+
@@ -492,6 +530,8 @@ Typedefs
+

Definition at line 98 of file Usb.h.

+
@@ -504,6 +544,8 @@ Typedefs
+

Definition at line 95 of file Usb.h.

+
@@ -516,6 +558,8 @@ Typedefs
+

Definition at line 86 of file Usb.h.

+
@@ -528,6 +572,8 @@ Typedefs
+

Definition at line 88 of file Usb.h.

+
@@ -540,6 +586,8 @@ Typedefs
+

Definition at line 92 of file Usb.h.

+
@@ -552,6 +600,8 @@ Typedefs
+

Definition at line 82 of file Usb.h.

+
@@ -564,6 +614,8 @@ Typedefs
+

Definition at line 100 of file Usb.h.

+
@@ -576,6 +628,8 @@ Typedefs
+

Definition at line 94 of file Usb.h.

+
@@ -588,6 +642,8 @@ Typedefs
+

Definition at line 97 of file Usb.h.

+
@@ -600,6 +656,8 @@ Typedefs
+

Definition at line 140 of file Usb.h.

+
@@ -612,6 +670,8 @@ Typedefs
+

Definition at line 138 of file Usb.h.

+
@@ -624,6 +684,8 @@ Typedefs
+

Definition at line 139 of file Usb.h.

+
@@ -636,6 +698,8 @@ Typedefs
+

Definition at line 104 of file Usb.h.

+
@@ -648,6 +712,8 @@ Typedefs
+

Definition at line 103 of file Usb.h.

+
@@ -660,6 +726,8 @@ Typedefs
+

Definition at line 108 of file Usb.h.

+
@@ -672,6 +740,8 @@ Typedefs
+

Definition at line 111 of file Usb.h.

+
@@ -684,6 +754,8 @@ Typedefs
+

Definition at line 113 of file Usb.h.

+
@@ -696,6 +768,8 @@ Typedefs
+

Definition at line 109 of file Usb.h.

+
@@ -708,6 +782,8 @@ Typedefs
+

Definition at line 107 of file Usb.h.

+
@@ -720,6 +796,8 @@ Typedefs
+

Definition at line 110 of file Usb.h.

+
@@ -732,6 +810,8 @@ Typedefs
+

Definition at line 112 of file Usb.h.

+
@@ -744,6 +824,8 @@ Typedefs
+

Definition at line 106 of file Usb.h.

+
@@ -756,6 +838,8 @@ Typedefs
+

Definition at line 114 of file Usb.h.

+
@@ -768,6 +852,8 @@ Typedefs
+

Definition at line 105 of file Usb.h.

+
@@ -780,6 +866,8 @@ Typedefs
+

Definition at line 25 of file Usb.h.

+
@@ -792,6 +880,8 @@ Typedefs
+

Definition at line 130 of file Usb.h.

+
@@ -804,6 +894,8 @@ Typedefs
+

Definition at line 127 of file Usb.h.

+
@@ -816,6 +908,8 @@ Typedefs
+

Definition at line 128 of file Usb.h.

+
@@ -828,6 +922,8 @@ Typedefs
+

Definition at line 146 of file Usb.h.

+
@@ -840,6 +936,8 @@ Typedefs
+

Definition at line 147 of file Usb.h.

+
@@ -852,6 +950,8 @@ Typedefs
+

Definition at line 137 of file Usb.h.

+
@@ -864,6 +964,8 @@ Typedefs
+

Definition at line 149 of file Usb.h.

+
@@ -876,6 +978,8 @@ Typedefs
+

Definition at line 135 of file Usb.h.

+
@@ -888,6 +992,8 @@ Typedefs
+

Definition at line 148 of file Usb.h.

+
@@ -900,6 +1006,8 @@ Typedefs
+

Definition at line 125 of file Usb.h.

+
@@ -916,6 +1024,8 @@ Typedefs
+

Definition at line 67 of file Usb.h.

+
@@ -942,6 +1052,8 @@ Typedefs
+

Definition at line 68 of file Usb.h.

+

Typedef Documentation

@@ -955,6 +1067,8 @@ Typedefs
+

Definition at line 63 of file Usb.h.

+
@@ -972,7 +1086,7 @@ Typedefs diff --git a/_usb_8h__dep__incl.map b/_usb_8h__dep__incl.map index 76317e53..8d1ba83a 100644 --- a/_usb_8h__dep__incl.map +++ b/_usb_8h__dep__incl.map @@ -1,43 +1,41 @@ - - + + - + - - - - - - - + + + + + + - - - - - - - + + + + + + + - - + + - + - diff --git a/_usb_8h__dep__incl.md5 b/_usb_8h__dep__incl.md5 index be26f9ef..8204e751 100644 --- a/_usb_8h__dep__incl.md5 +++ b/_usb_8h__dep__incl.md5 @@ -1 +1 @@ -3f438c9e83996f317e8ae268ac2869d8 \ No newline at end of file +9d517d3420627fcc5b265a4785d5eab1 \ No newline at end of file diff --git a/_usb_8h__dep__incl.png b/_usb_8h__dep__incl.png index 2c527564556514ad42d988b958d518570d6455ea..b5c96833fde58ecd2ec1e94426f3581e510a91d8 100644 GIT binary patch literal 105744 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

dhWsU(^Dc)Ofj6r-G0rRg1MTDy{zb$cx5v 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 diff --git a/_usb_8h_source.html b/_usb_8h_source.html index 447cb043..9c6a75c0 100644 --- a/_usb_8h_source.html +++ b/_usb_8h_source.html @@ -146,235 +146,237 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');

56 #elif defined(BOARD_TEENSY_PLUS_PLUS)
57 typedef MAX3421e<P9, P8> MAX3421E; // Teensy++ 2.0 & 1.0
58 #elif defined(BOARD_MEGA_ADK)
-
59 typedef MAX3421e<P53, P54> MAX3421E; // Arduino Mega ADK
-
60 #else
-
61 typedef MAX3421e<P10, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560
-
62 #endif
-
63 
-
64 //Debug macros. In 1.0 it is possible to move strings to PROGMEM by defining USBTRACE (Serial.print(F(s)))
-
65 #define USBTRACE(s) (Serial.print((s)))
-
66 #define USBTRACE2(s,r) (Serial.print((s)), Serial.println((r),HEX))
-
67 
-
68 
-
69 
-
70 /* Common setup data constant combinations */
-
71 #define bmREQ_GET_DESCR USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_DEVICE //get descriptor request type
-
72 #define bmREQ_SET USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_DEVICE //set request type for all but 'set feature' and 'set interface'
-
73 #define bmREQ_CL_GET_INTF USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE //get interface request type
-
74 
-
75 // D7 data transfer direction (0 - host-to-device, 1 - device-to-host)
-
76 // D6-5 Type (0- standard, 1 - class, 2 - vendor, 3 - reserved)
-
77 // D4-0 Recipient (0 - device, 1 - interface, 2 - endpoint, 3 - other, 4..31 - reserved)
-
78 
-
79 // USB Device Classes
-
80 #define USB_CLASS_USE_CLASS_INFO 0x00 // Use Class Info in the Interface Descriptors
-
81 #define USB_CLASS_AUDIO 0x01 // Audio
-
82 #define USB_CLASS_COM_AND_CDC_CTRL 0x02 // Communications and CDC Control
-
83 #define USB_CLASS_HID 0x03 // HID
-
84 #define USB_CLASS_PHYSICAL 0x05 // Physical
-
85 #define USB_CLASS_IMAGE 0x06 // Image
-
86 #define USB_CLASS_PRINTER 0x07 // Printer
-
87 #define USB_CLASS_MASS_STORAGE 0x08 // Mass Storage
-
88 #define USB_CLASS_HUB 0x09 // Hub
-
89 #define USB_CLASS_CDC_DATA 0x0a // CDC-Data
-
90 #define USB_CLASS_SMART_CARD 0x0b // Smart-Card
-
91 #define USB_CLASS_CONTENT_SECURITY 0x0d // Content Security
-
92 #define USB_CLASS_VIDEO 0x0e // Video
-
93 #define USB_CLASS_PERSONAL_HEALTH 0x0f // Personal Healthcare
-
94 #define USB_CLASS_DIAGNOSTIC_DEVICE 0xdc // Diagnostic Device
-
95 #define USB_CLASS_WIRELESS_CTRL 0xe0 // Wireless Controller
-
96 #define USB_CLASS_MISC 0xef // Miscellaneous
-
97 #define USB_CLASS_APP_SPECIFIC 0xfe // Application Specific
-
98 #define USB_CLASS_VENDOR_SPECIFIC 0xff // Vendor Specific
-
99 
-
100 // Additional Error Codes
-
101 #define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED 0xD1
-
102 #define USB_DEV_CONFIG_ERROR_DEVICE_INIT_INCOMPLETE 0xD2
-
103 #define USB_ERROR_UNABLE_TO_REGISTER_DEVICE_CLASS 0xD3
-
104 #define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL 0xD4
-
105 #define USB_ERROR_HUB_ADDRESS_OVERFLOW 0xD5
-
106 #define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL 0xD6
-
107 #define USB_ERROR_EPINFO_IS_NULL 0xD7
-
108 #define USB_ERROR_INVALID_ARGUMENT 0xD8
-
109 #define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE 0xD9
-
110 #define USB_ERROR_INVALID_MAX_PKT_SIZE 0xDA
-
111 #define USB_ERROR_EP_NOT_FOUND_IN_TBL 0xDB
-
112 #define USB_ERROR_TRANSFER_TIMEOUT 0xFF
-
113 
- -
115 {
-
116 public:
-
117  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed) = 0;
-
118  virtual uint8_t Release() = 0;
-
119  virtual uint8_t Poll() = 0;
-
120  virtual uint8_t GetAddress() = 0;
-
121 };
-
122 
-
123 #define USB_XFER_TIMEOUT 5000 //USB transfer timeout in milliseconds, per section 9.2.6.1 of USB 2.0 spec
-
124 //#define USB_NAK_LIMIT 32000 //NAK limit for a transfer. 0 means NAKs are not counted
-
125 #define USB_RETRY_LIMIT 3 //retry limit for a transfer
-
126 #define USB_SETTLE_DELAY 200 //settle delay in milliseconds
-
127 
-
128 #define USB_NUMDEVICES 16 //number of USB devices
-
129 //#define HUB_MAX_HUBS 7 // maximum number of hubs that can be attached to the host controller
-
130 #define HUB_PORT_RESET_DELAY 20 // hub port reset delay 10 ms recomended, can be up to 20 ms
-
131 
-
132 /* USB state machine states */
-
133 #define USB_STATE_MASK 0xf0
-
134 
-
135 #define USB_STATE_DETACHED 0x10
-
136 #define USB_DETACHED_SUBSTATE_INITIALIZE 0x11
-
137 #define USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE 0x12
-
138 #define USB_DETACHED_SUBSTATE_ILLEGAL 0x13
-
139 #define USB_ATTACHED_SUBSTATE_SETTLE 0x20
-
140 #define USB_ATTACHED_SUBSTATE_RESET_DEVICE 0x30
-
141 #define USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE 0x40
-
142 #define USB_ATTACHED_SUBSTATE_WAIT_SOF 0x50
-
143 #define USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE 0x60
-
144 #define USB_STATE_ADDRESSING 0x70
-
145 #define USB_STATE_CONFIGURING 0x80
-
146 #define USB_STATE_RUNNING 0x90
-
147 #define USB_STATE_ERROR 0xa0
-
148 
-
149 /* USB Setup Packet Structure */
-
150 typedef struct {
-
151  union { // offset description
-
152  uint8_t bmRequestType; // 0 Bit-map of request type
-
153  struct {
-
154  uint8_t recipient: 5; // Recipient of the request
-
155  uint8_t type: 2; // Type of request
-
156  uint8_t direction: 1; // Direction of data X-fer
-
157  };
-
158  }ReqType_u;
-
159  uint8_t bRequest; // 1 Request
-
160  union {
-
161  uint16_t wValue; // 2 Depends on bRequest
-
162  struct {
-
163  uint8_t wValueLo;
-
164  uint8_t wValueHi;
-
165  };
-
166  }wVal_u;
-
167  uint16_t wIndex; // 4 Depends on bRequest
-
168  uint16_t wLength; // 6 Depends on bRequest
- -
170 
-
171 
+
59 typedef MAX3421e<P53, P54> MAX3421E; // Arduino Mega ADK
+
60 #elif defined(BOARD_BALANDUINO)
+
61 typedef MAX3421e<P20, P19> MAX3421E; // Balanduino
+
62 #else
+
63 typedef MAX3421e<P10, P9> MAX3421E; // Official Arduinos (UNO, Duemilanove, Mega, 2560, Leonardo etc.)
+
64 #endif
+
65 
+
66 //Debug macros. In 1.0 it is possible to move strings to PROGMEM by defining USBTRACE (Serial.print(F(s)))
+
67 #define USBTRACE(s) (Serial.print((s)))
+
68 #define USBTRACE2(s,r) (Serial.print((s)), Serial.println((r),HEX))
+
69 
+
70 
+
71 
+
72 /* Common setup data constant combinations */
+
73 #define bmREQ_GET_DESCR USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_DEVICE //get descriptor request type
+
74 #define bmREQ_SET USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_STANDARD|USB_SETUP_RECIPIENT_DEVICE //set request type for all but 'set feature' and 'set interface'
+
75 #define bmREQ_CL_GET_INTF USB_SETUP_DEVICE_TO_HOST|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE //get interface request type
+
76 
+
77 // D7 data transfer direction (0 - host-to-device, 1 - device-to-host)
+
78 // D6-5 Type (0- standard, 1 - class, 2 - vendor, 3 - reserved)
+
79 // D4-0 Recipient (0 - device, 1 - interface, 2 - endpoint, 3 - other, 4..31 - reserved)
+
80 
+
81 // USB Device Classes
+
82 #define USB_CLASS_USE_CLASS_INFO 0x00 // Use Class Info in the Interface Descriptors
+
83 #define USB_CLASS_AUDIO 0x01 // Audio
+
84 #define USB_CLASS_COM_AND_CDC_CTRL 0x02 // Communications and CDC Control
+
85 #define USB_CLASS_HID 0x03 // HID
+
86 #define USB_CLASS_PHYSICAL 0x05 // Physical
+
87 #define USB_CLASS_IMAGE 0x06 // Image
+
88 #define USB_CLASS_PRINTER 0x07 // Printer
+
89 #define USB_CLASS_MASS_STORAGE 0x08 // Mass Storage
+
90 #define USB_CLASS_HUB 0x09 // Hub
+
91 #define USB_CLASS_CDC_DATA 0x0a // CDC-Data
+
92 #define USB_CLASS_SMART_CARD 0x0b // Smart-Card
+
93 #define USB_CLASS_CONTENT_SECURITY 0x0d // Content Security
+
94 #define USB_CLASS_VIDEO 0x0e // Video
+
95 #define USB_CLASS_PERSONAL_HEALTH 0x0f // Personal Healthcare
+
96 #define USB_CLASS_DIAGNOSTIC_DEVICE 0xdc // Diagnostic Device
+
97 #define USB_CLASS_WIRELESS_CTRL 0xe0 // Wireless Controller
+
98 #define USB_CLASS_MISC 0xef // Miscellaneous
+
99 #define USB_CLASS_APP_SPECIFIC 0xfe // Application Specific
+
100 #define USB_CLASS_VENDOR_SPECIFIC 0xff // Vendor Specific
+
101 
+
102 // Additional Error Codes
+
103 #define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED 0xD1
+
104 #define USB_DEV_CONFIG_ERROR_DEVICE_INIT_INCOMPLETE 0xD2
+
105 #define USB_ERROR_UNABLE_TO_REGISTER_DEVICE_CLASS 0xD3
+
106 #define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL 0xD4
+
107 #define USB_ERROR_HUB_ADDRESS_OVERFLOW 0xD5
+
108 #define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL 0xD6
+
109 #define USB_ERROR_EPINFO_IS_NULL 0xD7
+
110 #define USB_ERROR_INVALID_ARGUMENT 0xD8
+
111 #define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE 0xD9
+
112 #define USB_ERROR_INVALID_MAX_PKT_SIZE 0xDA
+
113 #define USB_ERROR_EP_NOT_FOUND_IN_TBL 0xDB
+
114 #define USB_ERROR_TRANSFER_TIMEOUT 0xFF
+
115 
+ +
117 {
+
118 public:
+
119  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed) = 0;
+
120  virtual uint8_t Release() = 0;
+
121  virtual uint8_t Poll() = 0;
+
122  virtual uint8_t GetAddress() = 0;
+
123 };
+
124 
+
125 #define USB_XFER_TIMEOUT 5000 //USB transfer timeout in milliseconds, per section 9.2.6.1 of USB 2.0 spec
+
126 //#define USB_NAK_LIMIT 32000 //NAK limit for a transfer. 0 means NAKs are not counted
+
127 #define USB_RETRY_LIMIT 3 //retry limit for a transfer
+
128 #define USB_SETTLE_DELAY 200 //settle delay in milliseconds
+
129 
+
130 #define USB_NUMDEVICES 16 //number of USB devices
+
131 //#define HUB_MAX_HUBS 7 // maximum number of hubs that can be attached to the host controller
+
132 #define HUB_PORT_RESET_DELAY 20 // hub port reset delay 10 ms recomended, can be up to 20 ms
+
133 
+
134 /* USB state machine states */
+
135 #define USB_STATE_MASK 0xf0
+
136 
+
137 #define USB_STATE_DETACHED 0x10
+
138 #define USB_DETACHED_SUBSTATE_INITIALIZE 0x11
+
139 #define USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE 0x12
+
140 #define USB_DETACHED_SUBSTATE_ILLEGAL 0x13
+
141 #define USB_ATTACHED_SUBSTATE_SETTLE 0x20
+
142 #define USB_ATTACHED_SUBSTATE_RESET_DEVICE 0x30
+
143 #define USB_ATTACHED_SUBSTATE_WAIT_RESET_COMPLETE 0x40
+
144 #define USB_ATTACHED_SUBSTATE_WAIT_SOF 0x50
+
145 #define USB_ATTACHED_SUBSTATE_GET_DEVICE_DESCRIPTOR_SIZE 0x60
+
146 #define USB_STATE_ADDRESSING 0x70
+
147 #define USB_STATE_CONFIGURING 0x80
+
148 #define USB_STATE_RUNNING 0x90
+
149 #define USB_STATE_ERROR 0xa0
+
150 
+
151 /* USB Setup Packet Structure */
+
152 typedef struct {
+
153  union { // offset description
+
154  uint8_t bmRequestType; // 0 Bit-map of request type
+
155  struct {
+
156  uint8_t recipient: 5; // Recipient of the request
+
157  uint8_t type: 2; // Type of request
+
158  uint8_t direction: 1; // Direction of data X-fer
+
159  };
+
160  }ReqType_u;
+
161  uint8_t bRequest; // 1 Request
+
162  union {
+
163  uint16_t wValue; // 2 Depends on bRequest
+
164  struct {
+
165  uint8_t wValueLo;
+
166  uint8_t wValueHi;
+
167  };
+
168  }wVal_u;
+
169  uint16_t wIndex; // 4 Depends on bRequest
+
170  uint16_t wLength; // 6 Depends on bRequest
+
172 
-
173 // Base class for incomming data parser
- -
175 {
-
176 public:
-
177  virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset) = 0;
-
178 };
-
179 
-
180 
-
181 class USB : public MAX3421E
-
182 {
- -
184  USBDeviceConfig* devConfig[USB_NUMDEVICES];
-
185  uint8_t devConfigIndex;
-
186  uint8_t bmHubPre;
-
187 
-
188  public:
-
189  USB( void );
-
190 
-
191  void SetHubPreMask() { bmHubPre |= bmHUBPRE; };
-
192  void ResetHubPreMask() { bmHubPre &= (~bmHUBPRE); };
-
193 
- -
195  {
-
196  return (AddressPool&)addrPool;
-
197  };
- -
199  {
-
200  for (uint8_t i=0; i<USB_NUMDEVICES; i++)
-
201  {
-
202  if (!devConfig[i])
-
203  {
-
204  devConfig[i] = pdev;
-
205  return 0;
-
206  }
-
207  }
- -
209  };
- -
211  {
-
212  addrPool.ForEachUsbDevice(pfunc);
-
213  };
-
214  uint8_t getUsbTaskState( void );
-
215  void setUsbTaskState( uint8_t state );
-
216 
-
217  EpInfo* getEpInfoEntry( uint8_t addr, uint8_t ep );
-
218  uint8_t setEpInfoEntry( uint8_t addr, uint8_t epcount, EpInfo* eprecord_ptr );
-
219 
-
220  //uint8_t ctrlReq( uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi, uint16_t wInd, uint16_t nbytes, uint8_t* dataptr);
+
173 
+
174 
+
175 // Base class for incomming data parser
+ +
177 {
+
178 public:
+
179  virtual void Parse(const uint16_t len, const uint8_t *pbuf, const uint16_t &offset) = 0;
+
180 };
+
181 
+
182 
+
183 class USB : public MAX3421E
+
184 {
+ +
186  USBDeviceConfig* devConfig[USB_NUMDEVICES];
+
187  uint8_t devConfigIndex;
+
188  uint8_t bmHubPre;
+
189 
+
190  public:
+
191  USB( void );
+
192 
+
193  void SetHubPreMask() { bmHubPre |= bmHUBPRE; };
+
194  void ResetHubPreMask() { bmHubPre &= (~bmHUBPRE); };
+
195 
+ +
197  {
+
198  return (AddressPool&)addrPool;
+
199  };
+ +
201  {
+
202  for (uint8_t i=0; i<USB_NUMDEVICES; i++)
+
203  {
+
204  if (!devConfig[i])
+
205  {
+
206  devConfig[i] = pdev;
+
207  return 0;
+
208  }
+
209  }
+ +
211  };
+ +
213  {
+
214  addrPool.ForEachUsbDevice(pfunc);
+
215  };
+
216  uint8_t getUsbTaskState( void );
+
217  void setUsbTaskState( uint8_t state );
+
218 
+
219  EpInfo* getEpInfoEntry( uint8_t addr, uint8_t ep );
+
220  uint8_t setEpInfoEntry( uint8_t addr, uint8_t epcount, EpInfo* eprecord_ptr );
221 
-
222  /* Control requests */
-
223  uint8_t getDevDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr );
-
224  uint8_t getConfDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr );
-
225 
-
226  uint8_t getConfDescr( uint8_t addr, uint8_t ep, uint8_t conf, USBReadParser *p );
+
222  //uint8_t ctrlReq( uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi, uint16_t wInd, uint16_t nbytes, uint8_t* dataptr);
+
223 
+
224  /* Control requests */
+
225  uint8_t getDevDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr );
+
226  uint8_t getConfDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr );
227 
-
228  uint8_t getStrDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t index, uint16_t langid, uint8_t* dataptr );
-
229  uint8_t setAddr( uint8_t oldaddr, uint8_t ep, uint8_t newaddr );
-
230  uint8_t setConf( uint8_t addr, uint8_t ep, uint8_t conf_value );
-
231 
-
232  uint8_t ctrlData( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr, boolean direction );
-
233  uint8_t ctrlStatus( uint8_t ep, boolean direction, uint16_t nak_limit );
-
234  uint8_t inTransfer( uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data );
-
235  uint8_t outTransfer( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data );
-
236  uint8_t dispatchPkt( uint8_t token, uint8_t ep, uint16_t nak_limit );
-
237 
-
238  void Task( void );
+
228  uint8_t getConfDescr( uint8_t addr, uint8_t ep, uint8_t conf, USBReadParser *p );
+
229 
+
230  uint8_t getStrDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t index, uint16_t langid, uint8_t* dataptr );
+
231  uint8_t setAddr( uint8_t oldaddr, uint8_t ep, uint8_t newaddr );
+
232  uint8_t setConf( uint8_t addr, uint8_t ep, uint8_t conf_value );
+
233 
+
234  uint8_t ctrlData( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr, boolean direction );
+
235  uint8_t ctrlStatus( uint8_t ep, boolean direction, uint16_t nak_limit );
+
236  uint8_t inTransfer( uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t* data );
+
237  uint8_t outTransfer( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* data );
+
238  uint8_t dispatchPkt( uint8_t token, uint8_t ep, uint16_t nak_limit );
239 
-
240  uint8_t DefaultAddressing(uint8_t parent, uint8_t port, bool lowspeed);
-
241  uint8_t Configuring(uint8_t parent, uint8_t port, bool lowspeed);
-
242  uint8_t ReleaseDevice(uint8_t addr);
-
243 
-
244  uint8_t ctrlReq( uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi,
-
245  uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t* dataptr, USBReadParser *p);
-
246 
-
247  private:
-
248  void init();
-
249  uint8_t SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t &nak_limit);
-
250  uint8_t OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data);
-
251  uint8_t InTransfer (EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t *data);
-
252 };
-
253 
-
254 #if 0 //defined(USB_METHODS_INLINE)
-
255 //get device descriptor
-
256 inline uint8_t USB::getDevDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr )
-
257 {
-
258  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, USB_DESCRIPTOR_DEVICE, 0x0000, nbytes, dataptr ));
-
259 }
-
260 //get configuration descriptor
-
261 inline uint8_t USB::getConfDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr )
-
262 {
-
263  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, nbytes, dataptr ));
-
264 }
-
265 //get string descriptor
-
266 inline uint8_t USB::getStrDescr( uint8_t addr, uint8_t ep, uint16_t nuint8_ts, uint8_t index, uint16_t langid, uint8_t* dataptr )
-
267 {
-
268  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, index, USB_DESCRIPTOR_STRING, langid, nuint8_ts, dataptr ));
-
269 }
-
270 //set address
-
271 inline uint8_t USB::setAddr( uint8_t oldaddr, uint8_t ep, uint8_t newaddr )
-
272 {
-
273  return( ctrlReq( oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, NULL ));
-
274 }
-
275 //set configuration
-
276 inline uint8_t USB::setConf( uint8_t addr, uint8_t ep, uint8_t conf_value )
-
277 {
-
278  return( ctrlReq( addr, ep, bmREQ_SET, USB_REQUEST_SET_CONFIGURATION, conf_value, 0x00, 0x0000, 0x0000, NULL ));
-
279 }
-
280 
-
281 #endif // defined(USB_METHODS_INLINE)
-
282 
-
283 #endif //_usb_h_
+
240  void Task( void );
+
241 
+
242  uint8_t DefaultAddressing(uint8_t parent, uint8_t port, bool lowspeed);
+
243  uint8_t Configuring(uint8_t parent, uint8_t port, bool lowspeed);
+
244  uint8_t ReleaseDevice(uint8_t addr);
+
245 
+
246  uint8_t ctrlReq( uint8_t addr, uint8_t ep, uint8_t bmReqType, uint8_t bRequest, uint8_t wValLo, uint8_t wValHi,
+
247  uint16_t wInd, uint16_t total, uint16_t nbytes, uint8_t* dataptr, USBReadParser *p);
+
248 
+
249  private:
+
250  void init();
+
251  uint8_t SetAddress(uint8_t addr, uint8_t ep, EpInfo **ppep, uint16_t &nak_limit);
+
252  uint8_t OutTransfer(EpInfo *pep, uint16_t nak_limit, uint16_t nbytes, uint8_t *data);
+
253  uint8_t InTransfer (EpInfo *pep, uint16_t nak_limit, uint16_t *nbytesptr, uint8_t *data);
+
254 };
+
255 
+
256 #if 0 //defined(USB_METHODS_INLINE)
+
257 //get device descriptor
+
258 inline uint8_t USB::getDevDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t* dataptr )
+
259 {
+
260  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, 0x00, USB_DESCRIPTOR_DEVICE, 0x0000, nbytes, dataptr ));
+
261 }
+
262 //get configuration descriptor
+
263 inline uint8_t USB::getConfDescr( uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t* dataptr )
+
264 {
+
265  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, conf, USB_DESCRIPTOR_CONFIGURATION, 0x0000, nbytes, dataptr ));
+
266 }
+
267 //get string descriptor
+
268 inline uint8_t USB::getStrDescr( uint8_t addr, uint8_t ep, uint16_t nuint8_ts, uint8_t index, uint16_t langid, uint8_t* dataptr )
+
269 {
+
270  return( ctrlReq( addr, ep, bmREQ_GET_DESCR, USB_REQUEST_GET_DESCRIPTOR, index, USB_DESCRIPTOR_STRING, langid, nuint8_ts, dataptr ));
+
271 }
+
272 //set address
+
273 inline uint8_t USB::setAddr( uint8_t oldaddr, uint8_t ep, uint8_t newaddr )
+
274 {
+
275  return( ctrlReq( oldaddr, ep, bmREQ_SET, USB_REQUEST_SET_ADDRESS, newaddr, 0x00, 0x0000, 0x0000, NULL ));
+
276 }
+
277 //set configuration
+
278 inline uint8_t USB::setConf( uint8_t addr, uint8_t ep, uint8_t conf_value )
+
279 {
+
280  return( ctrlReq( addr, ep, bmREQ_SET, USB_REQUEST_SET_CONFIGURATION, conf_value, 0x00, 0x0000, 0x0000, NULL ));
+
281 }
+
282 
+
283 #endif // defined(USB_METHODS_INLINE)
+
284 
+
285 #endif //_usb_h_
diff --git a/_wii_8cpp.html b/_wii_8cpp.html index 85c53aa0..8fe50d07 100644 --- a/_wii_8cpp.html +++ b/_wii_8cpp.html @@ -99,7 +99,9 @@ Include dependency graph for Wii.cpp: - + +

Go to the source code of this file.

+
@@ -107,8 +109,8 @@ Macros

Macros

#define DEBUG
- - + +

Variables

const uint8_t LEDS[] PROGMEM
 
const uint8_t LEDS[] PROGMEM
 

Macro Definition Documentation

@@ -121,15 +123,17 @@ Variables
+

Definition at line 23 of file Wii.cpp.

+

Variable Documentation

- +
- +
const uint32_t BUTTONS [] PROGMEMconst uint32_t PROCONTROLLERBUTTONS [] PROGMEM
@@ -147,12 +151,14 @@ Variables
0xF0
}
+

Definition at line 27 of file Wii.cpp.

+
diff --git a/_wii_8cpp_source.html b/_wii_8cpp_source.html new file mode 100644 index 00000000..134b18ce --- /dev/null +++ b/_wii_8cpp_source.html @@ -0,0 +1,1257 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/Wii.cpp Source File + + + + + + + + + +
+
+ + + + + + +
+
USB_Host_Shield_2.0 +
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
Wii.cpp
+
+
+Go to the documentation of this file.
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
+
2 
+
3  This software may be distributed and modified under the terms of the GNU
+
4  General Public License version 2 (GPL2) as published by the Free Software
+
5  Foundation and appearing in the file GPL2.TXT included in the packaging of
+
6  this file. Please note that GPL2 Section 2[b] requires that all works based
+
7  on this software must also be made publicly available under the terms of
+
8  the GPL2 ("Copyleft").
+
9 
+
10  Contact information
+
11  -------------------
+
12 
+
13  Kristian Lauszus, TKJ Electronics
+
14  Web : http://www.tkjelectronics.com
+
15  e-mail : kristianl@tkjelectronics.com
+
16 
+
17  IR camera support added by:
+
18  Allan Glover
+
19  adglover9.81@gmail.com
+
20  */
+
21 
+
22 #include "Wii.h"
+
23 #define DEBUG // Uncomment to print data for debugging
+
24 //#define EXTRADEBUG // Uncomment to get even more debugging data
+
25 //#define PRINTREPORT // Uncomment to print the report send by the Wii controllers
+
26 
+
27 const uint8_t LEDS[] PROGMEM = {
+
28  0x10, // LED1
+
29  0x20, // LED2
+
30  0x40, // LED3
+
31  0x80, // LED4
+
32 
+
33  0x90, // LED5
+
34  0xA0, // LED6
+
35  0xC0, // LED7
+
36  0xD0, // LED8
+
37  0xE0, // LED9
+
38  0xF0 // LED10
+
39  };
+
40 
+
41 const uint32_t BUTTONS[] PROGMEM = {
+
42  0x00008, // UP
+
43  0x00002, // RIGHT
+
44  0x00004, // DOWN
+
45  0x00001, // LEFT
+
46 
+
47  0, // Skip
+
48  0x00010, // PLUS
+
49  0x00100, // TWO
+
50  0x00200, // ONE
+
51 
+
52  0x01000, // MINUS
+
53  0x08000, // HOME
+
54  0x10000, // Z
+
55  0x20000, // C
+
56 
+
57  0x00400, // B
+
58  0x00800 // A
+
59 };
+
60 const uint32_t PROCONTROLLERBUTTONS[] PROGMEM = {
+
61  0x00100, // UP
+
62  0x00080, // RIGHT
+
63  0x00040, // DOWN
+
64  0x00200, // LEFT
+
65 
+
66  0, // Skip
+
67  0x00004, // PLUS
+
68  0x20000, // L3
+
69  0x10000, // R3
+
70 
+
71  0x00010, // MINUS
+
72  0x00008, // HOME
+
73  0,0, // Skip
+
74 
+
75  0x04000, // B
+
76  0x01000, // A
+
77  0x00800, // X
+
78  0x02000, // Y
+
79 
+
80  0x00020, // L
+
81  0x00002, // R
+
82  0x08000, // ZL
+
83  0x00400 // ZR
+
84 };
+
85 
+
86 WII::WII(BTD *p, bool pair):
+
87 pBtd(p) // pointer to USB class instance - mandatory
+
88 {
+
89  if (pBtd)
+
90  pBtd->registerServiceClass(this); // Register it as a Bluetooth service
+
91 
+
92  pBtd->pairWithWii = pair;
+
93 
+
94  HIDBuffer[0] = 0xA2;// HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
95 
+
96  /* Set device cid for the control and intterrupt channelse - LSB */
+
97  control_dcid[0] = 0x60;//0x0060
+
98  control_dcid[1] = 0x00;
+
99  interrupt_dcid[0] = 0x61;//0x0061
+
100  interrupt_dcid[1] = 0x00;
+
101 
+
102  Reset();
+
103 }
+
104 void WII::Reset() {
+
105  wiimoteConnected = false;
+
106  nunchuckConnected = false;
+
107  motionPlusConnected = false;
+
108  activateNunchuck = false;
+
109  motionValuesReset = false;
+
110  activeConnection = false;
+
111  pBtd->motionPlusInside = false;
+
112  pBtd->wiiUProController = false;
+ +
114  l2cap_event_flag = 0; // Reset flags
+
115  l2cap_state = L2CAP_WAIT;
+
116 }
+
117 
+
118 void WII::disconnect() { // Use this void to disconnect any of the controllers
+
119  //First the HID interrupt channel has to be disconencted, then the HID control channel and finally the HCI connection
+
120  pBtd->l2cap_disconnection_request(hci_handle,0x0A, interrupt_scid, interrupt_dcid);
+
121  Reset();
+
122  l2cap_state = L2CAP_INTERRUPT_DISCONNECT;
+
123 }
+
124 
+
125 void WII::ACLData(uint8_t* l2capinbuf) {
+
126  if(!pBtd->l2capConnectionClaimed && pBtd->incomingWii && !wiimoteConnected && !activeConnection) {
+
127  if (l2capinbuf[8] == L2CAP_CMD_CONNECTION_REQUEST) {
+
128  if((l2capinbuf[12] | (l2capinbuf[13] << 8)) == HID_CTRL_PSM) {
+
129  pBtd->incomingWii = false;
+
130  pBtd->l2capConnectionClaimed = true; // Claim that the incoming connection belongs to this service
+
131  activeConnection = true;
+
132  hci_handle = pBtd->hci_handle; // Store the HCI Handle for the connection
+
133  l2cap_state = L2CAP_WAIT;
+
134  }
+
135  }
+
136  }
+
137  if ((l2capinbuf[0] | (l2capinbuf[1] << 8)) == (hci_handle | 0x2000)) { // acl_handle_ok or it's a new connection
+
138  if ((l2capinbuf[6] | (l2capinbuf[7] << 8)) == 0x0001) { //l2cap_control - Channel ID for ACL-U
+
139  if (l2capinbuf[8] == L2CAP_CMD_COMMAND_REJECT) {
+
140 #ifdef DEBUG
+
141  Notify(PSTR("\r\nL2CAP Command Rejected - Reason: "));
+
142  PrintHex<uint8_t>(l2capinbuf[13]);
+
143  Notify(PSTR(" "));
+
144  PrintHex<uint8_t>(l2capinbuf[12]);
+
145  Notify(PSTR(" "));
+
146  PrintHex<uint8_t>(l2capinbuf[17]);
+
147  Notify(PSTR(" "));
+
148  PrintHex<uint8_t>(l2capinbuf[16]);
+
149  Notify(PSTR(" "));
+
150  PrintHex<uint8_t>(l2capinbuf[15]);
+
151  Notify(PSTR(" "));
+
152  PrintHex<uint8_t>(l2capinbuf[14]);
+
153 #endif
+
154  }
+
155  else if (l2capinbuf[8] == L2CAP_CMD_CONNECTION_RESPONSE) {
+
156  if (((l2capinbuf[16] | (l2capinbuf[17] << 8)) == 0x0000) && ((l2capinbuf[18] | (l2capinbuf[19] << 8)) == SUCCESSFUL)) { // Success
+
157  if (l2capinbuf[14] == control_dcid[0] && l2capinbuf[15] == control_dcid[1]) { // Success
+
158  //Serial.print("\r\nHID Control Connection Complete");
+
159  identifier = l2capinbuf[9];
+
160  control_scid[0] = l2capinbuf[12];
+
161  control_scid[1] = l2capinbuf[13];
+
162  l2cap_event_flag |= L2CAP_FLAG_CONTROL_CONNECTED;
+
163  }
+
164  else if (l2capinbuf[14] == interrupt_dcid[0] && l2capinbuf[15] == interrupt_dcid[1]) {
+
165  //Serial.print("\r\nHID Interrupt Connection Complete");
+
166  identifier = l2capinbuf[9];
+
167  interrupt_scid[0] = l2capinbuf[12];
+
168  interrupt_scid[1] = l2capinbuf[13];
+
169  l2cap_event_flag |= L2CAP_FLAG_INTERRUPT_CONNECTED;
+
170  }
+
171  }
+
172  }
+
173  else if (l2capinbuf[8] == L2CAP_CMD_CONNECTION_REQUEST) {
+
174 #ifdef EXTRADEBUG
+
175  Notify(PSTR("\r\nL2CAP Connection Request - PSM: "));
+
176  PrintHex<uint8_t>(l2capinbuf[13]);
+
177  Notify(PSTR(" "));
+
178  PrintHex<uint8_t>(l2capinbuf[12]);
+
179  Notify(PSTR(" SCID: "));
+
180  PrintHex<uint8_t>(l2capinbuf[15]);
+
181  Notify(PSTR(" "));
+
182  PrintHex<uint8_t>(l2capinbuf[14]);
+
183  Notify(PSTR(" Identifier: "));
+
184  PrintHex<uint8_t>(l2capinbuf[9]);
+
185 #endif
+
186  if ((l2capinbuf[12] | (l2capinbuf[13] << 8)) == HID_CTRL_PSM) {
+
187  identifier = l2capinbuf[9];
+
188  control_scid[0] = l2capinbuf[14];
+
189  control_scid[1] = l2capinbuf[15];
+
190  l2cap_event_flag |= L2CAP_FLAG_CONNECTION_CONTROL_REQUEST;
+
191  }
+
192  else if ((l2capinbuf[12] | (l2capinbuf[13] << 8)) == HID_INTR_PSM) {
+
193  identifier = l2capinbuf[9];
+
194  interrupt_scid[0] = l2capinbuf[14];
+
195  interrupt_scid[1] = l2capinbuf[15];
+
196  l2cap_event_flag |= L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST;
+
197  }
+
198  }
+
199  else if (l2capinbuf[8] == L2CAP_CMD_CONFIG_RESPONSE) {
+
200  if ((l2capinbuf[16] | (l2capinbuf[17] << 8)) == 0x0000) { // Success
+
201  if (l2capinbuf[12] == control_dcid[0] && l2capinbuf[13] == control_dcid[1]) {
+
202  //Serial.print("\r\nHID Control Configuration Complete");
+
203  identifier = l2capinbuf[9];
+
204  l2cap_event_flag |= L2CAP_FLAG_CONFIG_CONTROL_SUCCESS;
+
205  }
+
206  else if (l2capinbuf[12] == interrupt_dcid[0] && l2capinbuf[13] == interrupt_dcid[1]) {
+
207  //Serial.print("\r\nHID Interrupt Configuration Complete");
+
208  identifier = l2capinbuf[9];
+
209  l2cap_event_flag |= L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS;
+
210  }
+
211  }
+
212  }
+
213  else if (l2capinbuf[8] == L2CAP_CMD_CONFIG_REQUEST) {
+
214  if (l2capinbuf[12] == control_dcid[0] && l2capinbuf[13] == control_dcid[1]) {
+
215  //Serial.print("\r\nHID Control Configuration Request");
+
216  pBtd->l2cap_config_response(hci_handle, l2capinbuf[9], control_scid);
+
217  }
+
218  else if (l2capinbuf[12] == interrupt_dcid[0] && l2capinbuf[13] == interrupt_dcid[1]) {
+
219  //Serial.print("\r\nHID Interrupt Configuration Request");
+
220  pBtd->l2cap_config_response(hci_handle, l2capinbuf[9], interrupt_scid);
+
221  }
+
222  }
+
223  else if (l2capinbuf[8] == L2CAP_CMD_DISCONNECT_REQUEST) {
+
224  if (l2capinbuf[12] == control_dcid[0] && l2capinbuf[13] == control_dcid[1]) {
+
225 #ifdef DEBUG
+
226  Notify(PSTR("\r\nDisconnect Request: Control Channel"));
+
227 #endif
+
228  identifier = l2capinbuf[9];
+
229  pBtd->l2cap_disconnection_response(hci_handle,identifier,control_dcid,control_scid);
+
230  Reset();
+
231  }
+
232  else if (l2capinbuf[12] == interrupt_dcid[0] && l2capinbuf[13] == interrupt_dcid[1]) {
+
233 #ifdef DEBUG
+
234  Notify(PSTR("\r\nDisconnect Request: Interrupt Channel"));
+
235 #endif
+
236  identifier = l2capinbuf[9];
+
237  pBtd->l2cap_disconnection_response(hci_handle,identifier,interrupt_dcid,interrupt_scid);
+
238  Reset();
+
239  }
+
240  }
+
241  else if (l2capinbuf[8] == L2CAP_CMD_DISCONNECT_RESPONSE) {
+
242  if (l2capinbuf[12] == control_scid[0] && l2capinbuf[13] == control_scid[1]) {
+
243  //Serial.print("\r\nDisconnect Response: Control Channel");
+
244  identifier = l2capinbuf[9];
+
245  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE;
+
246  }
+
247  else if (l2capinbuf[12] == interrupt_scid[0] && l2capinbuf[13] == interrupt_scid[1]) {
+
248  //Serial.print("\r\nDisconnect Response: Interrupt Channel");
+
249  identifier = l2capinbuf[9];
+
250  l2cap_event_flag |= L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE;
+
251  }
+
252  }
+
253 #ifdef EXTRADEBUG
+
254  else {
+
255  identifier = l2capinbuf[9];
+
256  Notify(PSTR("\r\nL2CAP Unknown Signaling Command: "));
+
257  PrintHex<uint8_t>(l2capinbuf[8]);
+
258  }
+
259 #endif
+
260  } else if (l2capinbuf[6] == interrupt_dcid[0] && l2capinbuf[7] == interrupt_dcid[1]) { // l2cap_interrupt
+
261  //Serial.print("\r\nL2CAP Interrupt");
+
262  if(wiimoteConnected) {
+
263  if(l2capinbuf[8] == 0xA1) { // HID_THDR_DATA_INPUT
+
264  if((l2capinbuf[9] >= 0x20 && l2capinbuf[9] <= 0x22) || (l2capinbuf[9] >= 0x30 && l2capinbuf[9] <= 0x37) || l2capinbuf[9] == 0x3e || l2capinbuf[9] == 0x3f) { // These reports include the buttons
+
265  if((l2capinbuf[9] >= 0x20 && l2capinbuf[9] <= 0x22) || l2capinbuf[9] == 0x31 || l2capinbuf[9] == 0x33) // These reports have no extensions bytes
+
266  ButtonState = (uint32_t)((l2capinbuf[10] & 0x1F) | ((uint16_t)(l2capinbuf[11] & 0x9F) << 8));
+ +
268  ButtonState = (uint32_t)(((~l2capinbuf[23]) & 0xFE) | ((uint16_t)(~l2capinbuf[24]) << 8) | ((uint32_t)((~l2capinbuf[25]) & 0x03) << 16));
+
269  else if(motionPlusConnected) {
+
270  if(l2capinbuf[20] & 0x02) // Only update the wiimote buttons, since the extension bytes are from the Motion Plus
+
271  ButtonState = (uint32_t)((l2capinbuf[10] & 0x1F) | ((uint16_t)(l2capinbuf[11] & 0x9F) << 8) | ((uint32_t)(ButtonState & 0xFFFF0000)));
+
272  else if (nunchuckConnected) // Update if it's a report from the Nunchuck
+
273  ButtonState = (uint32_t)((l2capinbuf[10] & 0x1F) | ((uint16_t)(l2capinbuf[11] & 0x9F) << 8) | ((uint32_t)((~l2capinbuf[20]) & 0x0C) << 14));
+
274  //else if(classicControllerConnected) // Update if it's a report from the Classic Controller
+
275  }
+
276  else if(nunchuckConnected) // The Nunchuck is directly connected
+
277  ButtonState = (uint32_t)((l2capinbuf[10] & 0x1F) | ((uint16_t)(l2capinbuf[11] & 0x9F) << 8) | ((uint32_t)((~l2capinbuf[20]) & 0x03) << 16));
+
278  //else if(classicControllerConnected) // The Classic Controller is directly connected
+
279  else if(!unknownExtensionConnected)
+
280  ButtonState = (uint32_t)((l2capinbuf[10] & 0x1F) | ((uint16_t)(l2capinbuf[11] & 0x9F) << 8));
+
281 #ifdef PRINTREPORT
+
282  Notify(PSTR("ButtonState: "));
+
283  PrintHex<uint32_t>(ButtonState);
+
284  Notify(PSTR("\r\n"));
+
285 #endif
+
286  if(ButtonState != OldButtonState) {
+
287  ButtonClickState = ButtonState & ~OldButtonState; // Update click state variable
+
288  OldButtonState = ButtonState;
+
289  }
+
290  }
+
291  if(l2capinbuf[9] == 0x31 || l2capinbuf[9] == 0x33 || l2capinbuf[9] == 0x35 || l2capinbuf[9] == 0x37) { // Read the accelerometer
+
292  accX = ((l2capinbuf[12] << 2) | (l2capinbuf[10] & 0x60 >> 5))-500;
+
293  accY = ((l2capinbuf[13] << 2) | (l2capinbuf[11] & 0x20 >> 4))-500;
+
294  accZ = ((l2capinbuf[14] << 2) | (l2capinbuf[11] & 0x40 >> 5))-500;
+
295  wiimotePitch = (atan2(accY,accZ)+PI)*RAD_TO_DEG;
+
296  wiimoteRoll = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
+
297  }
+
298  switch (l2capinbuf[9]) {
+
299  case 0x20: // Status Information - (a1) 20 BB BB LF 00 00 VV
+
300  wiiState = l2capinbuf[12]; // (0x01: Battery is nearly empty), (0x02: An Extension Controller is connected), (0x04: Speaker enabled), (0x08: IR enabled), (0x10: LED1, 0x20: LED2, 0x40: LED3, 0x80: LED4)
+
301  batteryLevel = l2capinbuf[15]; // Update battery level
+
302  if(l2capinbuf[12] & 0x01) {
+
303 #ifdef DEBUG
+
304  Notify(PSTR("\r\nWARNING: Battery is nearly empty"));
+
305 #endif
+
306  }
+
307  if(l2capinbuf[12] & 0x02) { // Check if a extension is connected
+
308 #ifdef DEBUG
+
309  if(!unknownExtensionConnected)
+
310  Notify(PSTR("\r\nExtension connected"));
+
311 #endif
+
312  unknownExtensionConnected = true;
+
313 #ifdef WIICAMERA
+
314  if(!isIRCameraEnabled()) // Don't activate the Motion Plus if we are trying to initialize the IR camera
+
315 #endif
+
316  setReportMode(false,0x35); // Also read the extension
+
317  }
+
318  else {
+
319 #ifdef DEBUG
+
320  Notify(PSTR("\r\nExtension disconnected"));
+
321 #endif
+
322  if(motionPlusConnected) {
+
323 #ifdef DEBUG
+
324  Notify(PSTR(" - from Motion Plus"));
+
325 #endif
+
326  l2cap_event_flag &= ~WII_FLAG_NUNCHUCK_CONNECTED;
+
327  if(!activateNunchuck) // If it's already trying to initialize the Nunchuck don't set it to false
+
328  nunchuckConnected = false;
+
329  //else if(classicControllerConnected)
+
330  }
+
331  else if(nunchuckConnected) {
+
332 #ifdef DEBUG
+
333  Notify(PSTR(" - Nunchuck"));
+
334 #endif
+
335  nunchuckConnected = false; // It must be the Nunchuck controller then
+
336  l2cap_event_flag &= ~WII_FLAG_NUNCHUCK_CONNECTED;
+
337  setLedStatus();
+
338  setReportMode(false,0x31); // If there is no extension connected we will read the button and accelerometer
+
339  } else {
+
340  setReportMode(false,0x31); // If there is no extension connected we will read the button and accelerometer
+
341  }
+
342  }
+
343  break;
+
344  case 0x21: // Read Memory Data
+
345  if((l2capinbuf[12] & 0x0F) == 0) { // No error
+
346  // See: http://wiibrew.org/wiki/Wiimote/Extension_Controllers
+
347  if(l2capinbuf[16] == 0x00 && l2capinbuf[17] == 0xA4 && l2capinbuf[18] == 0x20 && l2capinbuf[19] == 0x00 && l2capinbuf[20] == 0x00) {
+
348 #ifdef DEBUG
+
349  Notify(PSTR("\r\nNunchuck connected"));
+
350 #endif
+
351  l2cap_event_flag |= WII_FLAG_NUNCHUCK_CONNECTED;
+
352  } else if(l2capinbuf[16] == 0x00 && (l2capinbuf[17] == 0xA6 || l2capinbuf[17] == 0xA4) && l2capinbuf[18] == 0x20 && l2capinbuf[19] == 0x00 && l2capinbuf[20] == 0x05) {
+
353 #ifdef DEBUG
+
354  Notify(PSTR("\r\nMotion Plus connected"));
+
355 #endif
+
356  l2cap_event_flag |= WII_FLAG_MOTION_PLUS_CONNECTED;
+
357  } else if(l2capinbuf[16] == 0x00 && l2capinbuf[17] == 0xA4 && l2capinbuf[18] == 0x20 && l2capinbuf[19] == 0x04 && l2capinbuf[20] == 0x05) {
+
358 #ifdef DEBUG
+
359  Notify(PSTR("\r\nMotion Plus activated in normal mode"));
+
360 #endif
+
361  motionPlusConnected = true;
+
362  } else if(l2capinbuf[16] == 0x00 && l2capinbuf[17] == 0xA4 && l2capinbuf[18] == 0x20 && l2capinbuf[19] == 0x05 && l2capinbuf[20] == 0x05) {
+
363 #ifdef DEBUG
+
364  Notify(PSTR("\r\nMotion Plus activated in Nunchuck pass-through mode"));
+
365 #endif
+
366  activateNunchuck = false;
+
367  motionPlusConnected = true;
+
368  nunchuckConnected = true;
+
369  } else if(l2capinbuf[16] == 0x00 && l2capinbuf[17] == 0xA6 && l2capinbuf[18] == 0x20 && (l2capinbuf[19] == 0x00 || l2capinbuf[19] == 0x04 || l2capinbuf[19] == 0x05 || l2capinbuf[19] == 0x07) && l2capinbuf[20] == 0x05) {
+
370 #ifdef DEBUG
+
371  Notify(PSTR("\r\nInactive Wii Motion Plus"));
+
372  Notify(PSTR("\r\nPlease unplug the Motion Plus, disconnect the Wiimote and then replug the Motion Plus Extension"));
+
373 #endif
+
374  stateCounter = 300; // Skip the rest in "L2CAP_CHECK_MOTION_PLUS_STATE"
+
375  } else if(l2capinbuf[16] == 0x00 && l2capinbuf[17] == 0xA4 && l2capinbuf[18] == 0x20 && l2capinbuf[19] == 0x01 && l2capinbuf[20] == 0x20) {
+
376 #ifdef DEBUG
+
377  Notify(PSTR("\r\nWii U Pro Controller connected"));
+
378 #endif
+ +
380  }
+
381 #ifdef DEBUG
+
382  else {
+
383  Notify(PSTR("\r\nUnknown Device: "));
+
384  PrintHex<uint8_t>(l2capinbuf[13]);
+
385  PrintHex<uint8_t>(l2capinbuf[14]);
+
386  Notify(PSTR("\r\nData: "));
+
387  for(uint8_t i = 0; i < ((l2capinbuf[12] >> 4)+1); i++) { // bit 4-7 is the length-1
+
388  PrintHex<uint8_t>(l2capinbuf[15+i]);
+
389  Notify(PSTR(" "));
+
390  }
+
391  }
+
392 #endif
+
393  }
+
394 #ifdef EXTRADEBUG
+
395  else {
+
396  Notify(PSTR("\r\nReport Error: "));
+
397  PrintHex<uint8_t>(l2capinbuf[13]);
+
398  PrintHex<uint8_t>(l2capinbuf[14]);
+
399  }
+
400 #endif
+
401  break;
+
402  case 0x22: // Acknowledge output report, return function result
+
403 #ifdef DEBUG
+
404  if(l2capinbuf[13] != 0x00) { // Check if there is an error
+
405  Notify(PSTR("\r\nCommand failed: "));
+
406  PrintHex<uint8_t>(l2capinbuf[12]);
+
407  }
+
408 #endif
+
409  break;
+
410  case 0x30: // Core buttons - (a1) 30 BB BB
+
411  break;
+
412  case 0x31: // Core Buttons and Accelerometer - (a1) 31 BB BB AA AA AA
+
413  pitch = wiimotePitch; // The pitch is just equal to the angle calculated from the wiimote as there is no Motion Plus connected
+
414  roll = wiimoteRoll;
+
415  break;
+
416  case 0x32: // Core Buttons with 8 Extension bytes - (a1) 32 BB BB EE EE EE EE EE EE EE EE
+
417  case 0x33: // Core Buttons with Accelerometer and 12 IR bytes - (a1) 33 BB BB AA AA AA II II II II II II II II II II II II
+
418  pitch = wiimotePitch; // The pitch is just equal to the angle calculated from the wiimote as there is no Motion Plus data available
+
419  roll = wiimoteRoll;
+
420 #ifdef WIICAMERA
+
421  // Read the IR data
+
422  IR_object_x1 = (l2capinbuf[15] | ((uint16_t)(l2capinbuf[17] & 0x30) << 4)); // x position
+
423  IR_object_y1 = (l2capinbuf[16] | ((uint16_t)(l2capinbuf[17] & 0xC0) << 2)); // y position
+
424  IR_object_s1 = (l2capinbuf[17] & 0x0F); // size value, 0-15
+
425 
+
426  IR_object_x2 = (l2capinbuf[18] | ((uint16_t)(l2capinbuf[20] & 0x30) << 4));
+
427  IR_object_y2 = (l2capinbuf[19] | ((uint16_t)(l2capinbuf[20] & 0xC0) << 2));
+
428  IR_object_s2 = (l2capinbuf[20] & 0x0F);
+
429 
+
430  IR_object_x3 = (l2capinbuf[21] | ((uint16_t)(l2capinbuf[23] & 0x30) << 4));
+
431  IR_object_y3 = (l2capinbuf[22] | ((uint16_t)(l2capinbuf[23] & 0xC0) << 2));
+
432  IR_object_s3 = (l2capinbuf[23] & 0x0F);
+
433 
+
434  IR_object_x4 = (l2capinbuf[24] | ((uint16_t)(l2capinbuf[26] & 0x30) << 4));
+
435  IR_object_y4 = (l2capinbuf[25] | ((uint16_t)(l2capinbuf[26] & 0xC0) << 2));
+
436  IR_object_s4 = (l2capinbuf[26] & 0x0F);
+
437 #endif
+
438  break;
+
439  case 0x34: // Core Buttons with 19 Extension bytes - (a1) 34 BB BB EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
+
440  break;
+
441  /* 0x3e and 0x3f both give unknown report types when report mode is 0x3e or 0x3f with mode number 0x05 */
+
442  case 0x3E: // Core Buttons with Accelerometer and 32 IR bytes
+
443  // (a1) 31 BB BB AA AA AA II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II II
+
444  // corresponds to output report mode 0x3e
+
445 
+
446  /**** for reading in full mode: DOES NOT WORK YET ****/
+
447  /* When it works it will also have intensity and bounding box data */
+
448  /*
+
449  IR_object_x1 = (l2capinbuf[13] | ((uint16_t)(l2capinbuf[15] & 0x30) << 4));
+
450  IR_object_y1 = (l2capinbuf[14] | ((uint16_t)(l2capinbuf[15] & 0xC0) << 2));
+
451  IR_object_s1 = (l2capinbuf[15] & 0x0F);
+
452  */
+
453  break;
+
454  case 0x3F:
+
455  /*
+
456  IR_object_x1 = (l2capinbuf[13] | ((uint16_t)(l2capinbuf[15] & 0x30) << 4));
+
457  IR_object_y1 = (l2capinbuf[14] | ((uint16_t)(l2capinbuf[15] & 0xC0) << 2));
+
458  IR_object_s1 = (l2capinbuf[15] & 0x0F);
+
459  */
+
460  break;
+
461  case 0x35: // Core Buttons and Accelerometer with 16 Extension Bytes
+
462  // (a1) 35 BB BB AA AA AA EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
+
463  if(motionPlusConnected) {
+
464  if(l2capinbuf[20] & 0x02) { // Check if it's a report from the Motion controller or the extension
+
465  if(motionValuesReset) { // We will only use the values when the gyro value has been set
+
466  gyroYawRaw = ((l2capinbuf[15] | ((l2capinbuf[18] & 0xFC) << 6))-gyroYawZero);
+
467  gyroRollRaw = ((l2capinbuf[16] | ((l2capinbuf[19] & 0xFC) << 6))-gyroRollZero);
+
468  gyroPitchRaw = ((l2capinbuf[17] | ((l2capinbuf[20] & 0xFC) << 6))-gyroPitchZero);
+
469 
+
470  yawGyroSpeed = (double)gyroYawRaw/((double)gyroYawZero/yawGyroScale);
+
471  rollGyroSpeed = -(double)gyroRollRaw/((double)gyroRollZero/rollGyroScale); // We invert these values so they will fit the acc values
+ +
473 
+
474  /* The onboard gyro has two ranges for slow and fast mode */
+
475  if(!(l2capinbuf[18] & 0x02)) // Check if fast more is used
+
476  yawGyroSpeed *= 4.545;
+
477  if(!(l2capinbuf[18] & 0x01)) // Check if fast more is used
+
478  pitchGyroSpeed *= 4.545;
+
479  if(!(l2capinbuf[19] & 0x02)) // Check if fast more is used
+
480  rollGyroSpeed *= 4.545;
+
481 
+
482  pitch = (0.93*(pitch+(pitchGyroSpeed*(double)(micros()-timer)/1000000)))+(0.07*wiimotePitch); // Use a complimentary filter to calculate the angle
+
483  roll = (0.93*(roll+(rollGyroSpeed*(double)(micros()-timer)/1000000)))+(0.07*wiimoteRoll);
+
484 
+
485  gyroYaw += (yawGyroSpeed*((double)(micros()-timer)/1000000));
+
486  gyroRoll += (rollGyroSpeed*((double)(micros()-timer)/1000000));
+
487  gyroPitch += (pitchGyroSpeed*((double)(micros()-timer)/1000000));
+
488  timer = micros();
+
489  /*
+
490  // Uncomment these lines to tune the gyro scale variabels
+
491  Serial.print("\r\ngyroYaw: ");
+
492  Serial.print(gyroYaw);
+
493  Serial.print("\tgyroRoll: ");
+
494  Serial.print(gyroRoll);
+
495  Serial.print("\tgyroPitch: ");
+
496  Serial.print(gyroPitch);
+
497  */
+
498  /*
+
499  Serial.print("\twiimoteRoll: ");
+
500  Serial.print(wiimoteRoll);
+
501  Serial.print("\twiimotePitch: ");
+
502  Serial.print(wiimotePitch);
+
503  */
+
504  } else {
+
505  if((micros() - timer) > 1000000) { // Loop for 1 sec before resetting the values
+
506 #ifdef DEBUG
+
507  Notify(PSTR("\r\nThe gyro values has been reset"));
+
508 #endif
+
509  gyroYawZero = (l2capinbuf[15] | ((l2capinbuf[18] & 0xFC) << 6));
+
510  gyroRollZero = (l2capinbuf[16] | ((l2capinbuf[19] & 0xFC) << 6));
+
511  gyroPitchZero = (l2capinbuf[17] | ((l2capinbuf[20] & 0xFC) << 6));
+
512 
+
513  rollGyroScale = 500; // You might need to adjust these
+
514  pitchGyroScale = 400;
+
515  yawGyroScale = 415;
+
516 
+
517  gyroYaw = 0;
+
518  gyroRoll = 0;
+
519  gyroPitch = 0;
+
520 
+
521  motionValuesReset = true;
+
522  timer = micros();
+
523  }
+
524  }
+
525  } else {
+
526  if(nunchuckConnected) {
+
527  hatValues[HatX] = l2capinbuf[15];
+
528  hatValues[HatY] = l2capinbuf[16];
+
529  accX = ((l2capinbuf[17] << 2) | (l2capinbuf[20] & 0x10 >> 3))-416;
+
530  accY = ((l2capinbuf[18] << 2) | (l2capinbuf[20] & 0x20 >> 4))-416;
+
531  accZ = (((l2capinbuf[19] & 0xFE) << 2) | (l2capinbuf[20] & 0xC0 >> 5))-416;
+
532  nunchuckPitch = (atan2(accY,accZ)+PI)*RAD_TO_DEG;
+
533  nunchuckRoll = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
+
534  }
+
535  //else if(classicControllerConnected) { }
+
536  }
+
537  if(l2capinbuf[19] & 0x01) {
+
538  if(!extensionConnected) {
+
539  extensionConnected = true;
+
540  unknownExtensionConnected = true;
+
541 #ifdef DEBUG
+
542  Notify(PSTR("\r\nExtension connected to Motion Plus"));
+
543 #endif
+
544  }
+
545  }
+
546  else {
+
547  if(extensionConnected && !unknownExtensionConnected) {
+
548  extensionConnected = false;
+
549  unknownExtensionConnected = true;
+
550 #ifdef DEBUG
+
551  Notify(PSTR("\r\nExtension disconnected from Motion Plus"));
+
552 #endif
+
553  nunchuckConnected = false; // There is no extension connected to the Motion Plus if this report is sent
+
554  }
+
555  }
+
556 
+
557  } else if(nunchuckConnected) {
+
558  hatValues[HatX] = l2capinbuf[15];
+
559  hatValues[HatY] = l2capinbuf[16];
+
560  accX = ((l2capinbuf[17] << 2) | (l2capinbuf[20] & 0x0C >> 2))-416;
+
561  accY = ((l2capinbuf[18] << 2) | (l2capinbuf[20] & 0x30 >> 4))-416;
+
562  accZ = ((l2capinbuf[19] << 2) | (l2capinbuf[20] & 0xC0 >> 6))-416;
+
563  nunchuckPitch = (atan2(accY,accZ)+PI)*RAD_TO_DEG;
+
564  nunchuckRoll = (atan2(accX,accZ)+PI)*RAD_TO_DEG;
+
565 
+
566  pitch = wiimotePitch; // The pitch is just equal to the angle calculated from the wiimote as there is no Motion Plus connected
+
567  roll = wiimoteRoll;
+
568  } else if(wiiUProControllerConnected) {
+
569  hatValues[LeftHatX] = (l2capinbuf[15] | l2capinbuf[16] << 8);
+
570  hatValues[RightHatX] = (l2capinbuf[17] | l2capinbuf[18] << 8);
+
571  hatValues[LeftHatY] = (l2capinbuf[19] | l2capinbuf[20] << 8);
+
572  hatValues[RightHatY] = (l2capinbuf[21] | l2capinbuf[22] << 8);
+
573  }
+
574  break;
+
575 #ifdef DEBUG
+
576  default:
+
577  Notify(PSTR("\r\nUnknown Report type: "));
+
578  Serial.print(l2capinbuf[9],HEX);
+
579  break;
+
580 #endif
+
581  }
+
582  }
+
583  }
+
584  }
+
585  L2CAP_task();
+
586  }
+
587 }
+
588 void WII::L2CAP_task() {
+
589  switch (l2cap_state) {
+
590  /* These states are used if the Wiimote is the host */
+ + +
593 #ifdef DEBUG
+
594  Notify(PSTR("\r\nHID Control Successfully Configured"));
+
595 #endif
+
596  l2cap_state = L2CAP_INTERRUPT_SETUP;
+
597  }
+
598  break;
+
599 
+ + +
602 #ifdef DEBUG
+
603  Notify(PSTR("\r\nHID Interrupt Incoming Connection Request"));
+
604 #endif
+
605  pBtd->l2cap_connection_response(hci_handle,identifier, interrupt_dcid, interrupt_scid, PENDING);
+
606  delay(1);
+
607  pBtd->l2cap_connection_response(hci_handle,identifier, interrupt_dcid, interrupt_scid, SUCCESSFUL);
+
608  identifier++;
+
609  delay(1);
+
610  pBtd->l2cap_config_request(hci_handle,identifier, interrupt_scid);
+
611 
+
612  l2cap_state = L2CAP_INTERRUPT_CONFIG_REQUEST;
+
613  }
+
614  break;
+
615 
+
616  /* These states are used if the Arduino is the host */
+ + +
619 #ifdef DEBUG
+
620  Notify(PSTR("\r\nSend HID Control Config Request"));
+
621 #endif
+
622  identifier++;
+
623  pBtd->l2cap_config_request(hci_handle, identifier, control_scid);
+
624  l2cap_state = L2CAP_CONTROL_CONFIG_REQUEST;
+
625  }
+
626  break;
+
627 
+ + +
630 #ifdef DEBUG
+
631  Notify(PSTR("\r\nSend HID Interrupt Connection Request"));
+
632 #endif
+
633  identifier++;
+
634  pBtd->l2cap_connection_request(hci_handle,identifier,interrupt_dcid,HID_INTR_PSM);
+
635  l2cap_state = L2CAP_INTERRUPT_CONNECT_REQUEST;
+
636  }
+
637  break;
+
638 
+ + +
641 #ifdef DEBUG
+
642  Notify(PSTR("\r\nSend HID Interrupt Config Request"));
+
643 #endif
+
644  identifier++;
+
645  pBtd->l2cap_config_request(hci_handle, identifier, interrupt_scid);
+
646  l2cap_state = L2CAP_INTERRUPT_CONFIG_REQUEST;
+
647  }
+
648  break;
+
649 
+ +
651  if(l2cap_config_success_interrupt_flag) { // Now the HID channels is established
+
652 #ifdef DEBUG
+
653  Notify(PSTR("\r\nHID Channels Established"));
+
654 #endif
+
655  pBtd->connectToWii = false;
+
656  pBtd->pairWithWii = false;
+
657  wiimoteConnected = true;
+
658  stateCounter = 0;
+
659  l2cap_state = L2CAP_CHECK_MOTION_PLUS_STATE;
+
660  }
+
661  break;
+
662 
+
663  /* The next states are in run() */
+
664 
+ + +
667 #ifdef DEBUG
+
668  Notify(PSTR("\r\nDisconnected Interrupt Channel"));
+
669 #endif
+
670  identifier++;
+
671  pBtd->l2cap_disconnection_request(hci_handle, identifier, control_scid, control_dcid);
+
672  l2cap_state = L2CAP_CONTROL_DISCONNECT;
+
673  }
+
674  break;
+
675 
+ + +
678 #ifdef DEBUG
+
679  Notify(PSTR("\r\nDisconnected Control Channel"));
+
680 #endif
+
681  pBtd->hci_disconnect(hci_handle);
+
682  hci_handle = -1; // Reset handle
+
683  l2cap_event_flag = 0; // Reset flags
+
684  l2cap_state = L2CAP_WAIT;
+
685  }
+
686  break;
+
687  }
+
688 }
+
689 void WII::Run() {
+
690  switch (l2cap_state) {
+
691  case L2CAP_WAIT:
+
692  if(pBtd->connectToWii && !pBtd->l2capConnectionClaimed && !wiimoteConnected && !activeConnection) {
+
693  pBtd->l2capConnectionClaimed = true;
+
694  activeConnection = true;
+
695 #ifdef DEBUG
+
696  Notify(PSTR("\r\nSend HID Control Connection Request"));
+
697 #endif
+
698  hci_handle = pBtd->hci_handle; // Store the HCI Handle for the connection
+
699  l2cap_event_flag = 0; // Reset flags
+
700  identifier = 0;
+
701  pBtd->l2cap_connection_request(hci_handle,identifier,control_dcid,HID_CTRL_PSM);
+
702  l2cap_state = L2CAP_CONTROL_CONNECT_REQUEST;
+ +
704 #ifdef DEBUG
+
705  Notify(PSTR("\r\nHID Control Incoming Connection Request"));
+
706 #endif
+
707  pBtd->l2cap_connection_response(hci_handle,identifier, control_dcid, control_scid, PENDING);
+
708  delay(1);
+
709  pBtd->l2cap_connection_response(hci_handle,identifier, control_dcid, control_scid, SUCCESSFUL);
+
710  identifier++;
+
711  delay(1);
+
712  pBtd->l2cap_config_request(hci_handle,identifier, control_scid);
+
713  l2cap_state = L2CAP_CONTROL_SUCCESS;
+
714  }
+
715  break;
+
716 
+ +
718 #ifdef DEBUG
+
719  if(stateCounter == 0) // Only print onnce
+
720  Notify(PSTR("\r\nChecking if a Motion Plus is connected"));
+
721 #endif
+
722  stateCounter++;
+
723  if(stateCounter%200 == 0)
+
724  checkMotionPresent(); // Check if there is a motion plus connected
+ +
726  stateCounter = 0;
+
727  l2cap_state = L2CAP_INIT_MOTION_PLUS_STATE;
+
728  timer = micros();
+
729 
+
730  if(unknownExtensionConnected) {
+
731 #ifdef DEBUG
+
732  Notify(PSTR("\r\nA extension is also connected"));
+
733 #endif
+
734  activateNunchuck = true; // For we will just set this to true as this the only extension supported so far
+
735  }
+
736 
+
737  }
+
738  else if(stateCounter == 601) { // We will try three times to check for the motion plus
+
739 #ifdef DEBUG
+
740  Notify(PSTR("\r\nNo Motion Plus was detected"));
+
741 #endif
+
742  stateCounter = 0;
+
743  l2cap_state = L2CAP_CHECK_EXTENSION_STATE;
+
744  }
+
745  break;
+
746 
+
747  case L2CAP_CHECK_EXTENSION_STATE: // This is used to check if there is anything plugged in to the extension port
+
748 #ifdef DEBUG
+
749  if(stateCounter == 0) // Only print onnce
+
750  Notify(PSTR("\r\nChecking if there is any extension connected"));
+
751 #endif
+
752  stateCounter++; // We use this counter as there has to be a short delay between the commands
+
753  if(stateCounter == 1)
+
754  statusRequest(); // See if a new device has connected
+
755  if(stateCounter == 100) {
+
756  if(unknownExtensionConnected) // Check if there is a extension is connected to the port
+
757  initExtension1();
+
758  else
+
759  stateCounter = 399;
+
760  } else if(stateCounter == 200)
+
761  initExtension2();
+
762  else if(stateCounter == 300) {
+
763  readExtensionType();
+
764  unknownExtensionConnected = false;
+
765  } else if(stateCounter == 400) {
+
766  stateCounter = 0;
+
767  l2cap_state = L2CAP_LED_STATE;
+
768  }
+
769  break;
+
770 
+ +
772  stateCounter++;
+
773  if(stateCounter == 1)
+
774  initMotionPlus();
+
775  else if(stateCounter == 100)
+
776  activateMotionPlus();
+
777  else if(stateCounter == 200)
+
778  readExtensionType(); // Check if it has been activated
+
779  else if(stateCounter == 300) {
+
780  stateCounter = 0;
+
781  unknownExtensionConnected = false; // The motion plus will send a status report when it's activated, we will set this to false so it doesn't reinitialize the Motion Plus
+
782  l2cap_state = L2CAP_LED_STATE;
+
783  }
+
784  break;
+
785 
+
786  case L2CAP_LED_STATE:
+ +
788  nunchuckConnected = true;
+
789  setLedStatus();
+
790  l2cap_state = L2CAP_DONE;
+
791  break;
+
792 
+
793  case L2CAP_DONE:
+
794  if(unknownExtensionConnected) {
+
795 #ifdef DEBUG
+
796  if(stateCounter == 0) // Only print once
+
797  Notify(PSTR("\r\nChecking extension port"));
+
798 #endif
+
799  stateCounter++; // We will use this counter as there has to be a short delay between the commands
+
800  if(stateCounter == 50)
+
801  statusRequest();
+
802  else if(stateCounter == 100)
+
803  initExtension1();
+
804  else if(stateCounter == 150)
+
805  if((extensionConnected && motionPlusConnected) || (unknownExtensionConnected && !motionPlusConnected))
+
806  initExtension2();
+
807  else
+
808  stateCounter = 299; // There is no extension connected
+
809  else if(stateCounter == 200)
+
810  readExtensionType();
+
811  else if(stateCounter == 250) {
+ +
813 #ifdef DEBUG
+
814  Notify(PSTR("\r\nNunchuck was reconnected"));
+
815 #endif
+
816  activateNunchuck = true;
+
817  nunchuckConnected = true;
+
818  }
+ +
820  stateCounter = 449;
+
821  }
+
822  else if (stateCounter == 300) {
+
823  if(motionPlusConnected) {
+
824 #ifdef DEBUG
+
825  Notify(PSTR("\r\nReactivating the Motion Plus"));
+
826 #endif
+
827  initMotionPlus();
+
828  } else
+
829  stateCounter = 449;
+
830  }
+
831  else if(stateCounter == 350)
+
832  activateMotionPlus();
+
833  else if(stateCounter == 400)
+
834  readExtensionType(); // Check if it has been activated
+
835  else if(stateCounter == 450) {
+
836  setLedStatus();
+
837  stateCounter = 0;
+
838  unknownExtensionConnected = false;
+
839  }
+
840  } else
+
841  stateCounter = 0;
+
842  break;
+
843  }
+
844 }
+
845 
+
846 /************************************************************/
+
847 /* HID Commands */
+
848 /************************************************************/
+
849 void WII::HID_Command(uint8_t* data, uint8_t nbytes) {
+
850  if(pBtd->motionPlusInside)
+
851  pBtd->L2CAP_Command(hci_handle,data,nbytes,interrupt_scid[0],interrupt_scid[1]); // It's the new wiimote with the Motion Plus Inside
+
852  else
+
853  pBtd->L2CAP_Command(hci_handle,data,nbytes,control_scid[0],control_scid[1]);
+
854 }
+ +
856  HIDBuffer[1] = 0x11;
+
857  HIDBuffer[2] = 0x00;
+
858  HID_Command(HIDBuffer, 3);
+
859 }
+ +
861  HIDBuffer[1] = 0x11;
+
862  HIDBuffer[2] &= ~0x01; // Bit 0 control the rumble
+
863  HID_Command(HIDBuffer, 3);
+
864 }
+ +
866  HIDBuffer[1] = 0x11;
+
867  HIDBuffer[2] |= 0x01; // Bit 0 control the rumble
+
868  HID_Command(HIDBuffer, 3);
+
869 }
+ +
871  HIDBuffer[1] = 0x11;
+
872  HIDBuffer[2] ^= 0x01; // Bit 0 control the rumble
+
873  HID_Command(HIDBuffer, 3);
+
874 }
+ +
876  HIDBuffer[1] = 0x11;
+
877  HIDBuffer[2] &= ~(pgm_read_byte(&LEDS[(uint8_t)a]));
+
878  HID_Command(HIDBuffer, 3);
+
879 }
+ +
881  HIDBuffer[1] = 0x11;
+
882  HIDBuffer[2] |= pgm_read_byte(&LEDS[(uint8_t)a]);
+
883  HID_Command(HIDBuffer, 3);
+
884 }
+ +
886  HIDBuffer[1] = 0x11;
+
887  HIDBuffer[2] ^= pgm_read_byte(&LEDS[(uint8_t)a]);
+
888  HID_Command(HIDBuffer, 3);
+
889 }
+ +
891  HIDBuffer[1] = 0x11;
+
892  HIDBuffer[2] = (HIDBuffer[2] & 0x01); // Keep the rumble bit
+
893  if(wiimoteConnected)
+
894  HIDBuffer[2] |= 0x10; // If it's connected LED1 will light up
+ +
896  HIDBuffer[2] |= 0x20; // If it's connected LED2 will light up
+ +
898  HIDBuffer[2] |= 0x40; // If it's connected LED3 will light up
+
899 
+
900  HID_Command(HIDBuffer, 3);
+
901 }
+
902 void WII::setReportMode(bool continuous, uint8_t mode) {
+
903  uint8_t cmd_buf[4];
+
904  cmd_buf[0] = 0xA2; // HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
905  cmd_buf[1] = 0x12;
+
906  if(continuous)
+
907  cmd_buf[2] = 0x04 | (HIDBuffer[2] & 0x01); // Keep the rumble bit
+
908  else
+
909  cmd_buf[2] = 0x00 | (HIDBuffer[2] & 0x01); // Keep the rumble bit
+
910  cmd_buf[3] = mode;
+
911  HID_Command(cmd_buf, 4);
+
912 }
+
913 void WII::statusRequest() {
+
914  uint8_t cmd_buf[3];
+
915  cmd_buf[0] = 0xA2; // HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
916  cmd_buf[1] = 0x15;
+
917  cmd_buf[2] = (HIDBuffer[2] & 0x01); // Keep the rumble bit
+
918  HID_Command(cmd_buf, 3);
+
919 }
+
920 
+
921 /************************************************************/
+
922 /* Memmory Commands */
+
923 /************************************************************/
+
924 void WII::writeData(uint32_t offset, uint8_t size, uint8_t* data) {
+
925  uint8_t cmd_buf[23];
+
926  cmd_buf[0] = 0xA2; // HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
927  cmd_buf[1] = 0x16; // Write data
+
928  cmd_buf[2] = 0x04 | (HIDBuffer[2] & 0x01); // Write to memory, clear bit 2 to write to EEPROM
+
929  cmd_buf[3] = (uint8_t)((offset & 0xFF0000) >> 16);
+
930  cmd_buf[4] = (uint8_t)((offset & 0xFF00) >> 8);
+
931  cmd_buf[5] = (uint8_t)(offset & 0xFF);
+
932  cmd_buf[6] = size;
+
933  uint8_t i = 0;
+
934  for(; i < size; i++)
+
935  cmd_buf[7+i] = data[i];
+
936  for(; i < 16; i++) // Set the rest to zero
+
937  cmd_buf[7+i] = 0x00;
+
938  HID_Command(cmd_buf,23);
+
939 }
+
940 void WII::initExtension1() {
+
941  uint8_t buf[1];
+
942  buf[0] = 0x55;
+
943  writeData(0xA400F0,1,buf);
+
944 }
+
945 void WII::initExtension2() {
+
946  uint8_t buf[1];
+
947  buf[0] = 0x00;
+
948  writeData(0xA400FB,1,buf);
+
949 }
+
950 void WII::initMotionPlus() {
+
951  uint8_t buf[1];
+
952  buf[0] = 0x55;
+
953  writeData(0xA600F0,1,buf);
+
954 }
+
955 void WII::activateMotionPlus() {
+
956  uint8_t buf[1];
+
957  if(pBtd->wiiUProController) {
+
958 #ifdef DEBUG
+
959  Notify(PSTR("\r\nActivating Wii U Pro Controller"));
+
960 #endif
+
961  buf[0] = 0x00; // It seems like you can send anything but 0x04, 0x05, and 0x07
+
962  } else if(activateNunchuck) {
+
963 #ifdef DEBUG
+
964  Notify(PSTR("\r\nActivating Motion Plus in pass-through mode"));
+
965 #endif
+
966  buf[0] = 0x05; // Activate nunchuck pass-through mode
+
967  }
+
968  //else if(classicControllerConnected && extensionConnected)
+
969  //buf[0] = 0x07;
+
970  else {
+
971 #ifdef DEBUG
+
972  Notify(PSTR("\r\nActivating Motion Plus in normal mode"));
+
973 #endif
+
974  buf[0] = 0x04; // Don't use any extension
+
975  }
+
976  writeData(0xA600FE,1,buf);
+
977 }
+
978 void WII::readData(uint32_t offset, uint16_t size, bool EEPROM) {
+
979  uint8_t cmd_buf[8];
+
980  cmd_buf[0] = 0xA2; // HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
981  cmd_buf[1] = 0x17; // Read data
+
982  if(EEPROM)
+
983  cmd_buf[2] = 0x00 | (HIDBuffer[2] & 0x01); // Read from EEPROM
+
984  else
+
985  cmd_buf[2] = 0x04 | (HIDBuffer[2] & 0x01); // Read from memory
+
986  cmd_buf[3] = (uint8_t)((offset & 0xFF0000) >> 16);
+
987  cmd_buf[4] = (uint8_t)((offset & 0xFF00) >> 8);
+
988  cmd_buf[5] = (uint8_t)(offset & 0xFF);
+
989  cmd_buf[6] = (uint8_t)((size & 0xFF00) >> 8);
+
990  cmd_buf[7] = (uint8_t)(size & 0xFF);
+
991 
+
992  HID_Command(cmd_buf,8);
+
993 }
+
994 void WII::readExtensionType() {
+
995  readData(0xA400FA,6,false);
+
996 }
+
997 void WII::readCalData() {
+
998  readData(0x0016,8,true);
+
999 }
+
1000 void WII::checkMotionPresent() {
+
1001  readData(0xA600FA,6,false);
+
1002 }
+
1003 
+
1004 /************************************************************/
+
1005 /* WII Commands */
+
1006 /************************************************************/
+
1007 
+
1008 bool WII::getButtonPress(Button b) { // Return true when a button is pressed
+ +
1010  return (ButtonState & pgm_read_dword(&PROCONTROLLERBUTTONS[(uint8_t)b]));
+
1011  else
+
1012  return (ButtonState & pgm_read_dword(&BUTTONS[(uint8_t)b]));
+
1013 }
+
1014 bool WII::getButtonClick(Button b) { // Only return true when a button is clicked
+
1015  uint32_t button;
+ +
1017  button = pgm_read_dword(&PROCONTROLLERBUTTONS[(uint8_t)b]);
+
1018  else
+
1019  button = pgm_read_dword(&BUTTONS[(uint8_t)b]);
+
1020  bool click = (ButtonClickState & button);
+
1021  ButtonClickState &= ~button; // clear "click" event
+
1022  return click;
+
1023 }
+ +
1025  if(!nunchuckConnected)
+
1026  return 127; // Return center position
+
1027  else {
+
1028  uint8_t output = hatValues[(uint8_t)a];
+
1029  if(output == 0xFF || output == 0x00) // The joystick will only read 255 or 0 when the cable is unplugged or initializing, so we will just return the center position
+
1030  return 127;
+
1031  else
+
1032  return output;
+
1033  }
+
1034 }
+ + +
1037  return 2000;
+
1038  else {
+
1039  uint16_t output = hatValues[(uint8_t)a];
+
1040  if(output == 0x00) // The joystick will only read 0 when it is first initializing, so we will just return the center position
+
1041  return 2000;
+
1042  else
+
1043  return output;
+
1044  }
+
1045 }
+
1046 /************************************************************/
+
1047 /* The following functions are for the IR camera */
+
1048 /************************************************************/
+
1049 
+
1050 #ifdef WIICAMERA
+
1051 
+
1052 void WII::IRinitialize(){ // Turns on and initialises the IR camera
+
1053 
+
1054  enableIRCamera1();
+
1055 #ifdef DEBUG
+
1056  Notify(PSTR("\r\nEnable IR Camera1 Complete"));
+
1057 #endif
+
1058  delay(80);
+
1059 
+
1060  enableIRCamera2();
+
1061 #ifdef DEBUG
+
1062  Notify(PSTR("\r\nEnable IR Camera2 Complete"));
+
1063 #endif
+
1064  delay(80);
+
1065 
+
1066  write0x08Value();
+
1067 #ifdef DEBUG
+
1068  Notify(PSTR("\r\nWrote hex number 0x08"));
+
1069 #endif
+
1070  delay(80);
+
1071 
+
1072  writeSensitivityBlock1();
+
1073 #ifdef DEBUG
+
1074  Notify(PSTR("\r\nWrote Sensitivity Block 1"));
+
1075 #endif
+
1076  delay(80);
+
1077 
+
1078  writeSensitivityBlock2();
+
1079 #ifdef DEBUG
+
1080  Notify(PSTR("\r\nWrote Sensitivity Block 2"));
+
1081 #endif
+
1082  delay(80);
+
1083 
+
1084  uint8_t mode_num = 0x03;
+
1085  setWiiModeNumber(mode_num); // Change input for whatever mode you want i.e. 0x01, 0x03, or 0x05
+
1086 #ifdef DEBUG
+
1087  Notify(PSTR("\r\nSet Wii Mode Number To 0x"));
+
1088  PrintHex<uint8_t>(mode_num);
+
1089 #endif
+
1090  delay(80);
+
1091 
+
1092  write0x08Value();
+
1093 #ifdef DEBUG
+
1094  Notify(PSTR("\r\nWrote Hex Number 0x08"));
+
1095 #endif
+
1096  delay(80);
+
1097 
+
1098  setReportMode(false, 0x33);
+
1099  //setReportMode(false, 0x3f); // For full reporting mode, doesn't work yet
+
1100 #ifdef DEBUG
+
1101  Notify(PSTR("\r\nSet Report Mode to 0x33"));
+
1102 #endif
+
1103  delay(80);
+
1104 
+
1105  statusRequest(); // Used to update wiiState - call isIRCameraEnabled() afterwards to check if it actually worked
+
1106 #ifdef DEBUG
+
1107  Notify(PSTR("\r\nIR Initialized"));
+
1108 #endif
+
1109 }
+
1110 
+
1111 void WII::enableIRCamera1(){
+
1112  uint8_t cmd_buf[3];
+
1113  cmd_buf[0] = 0xA2; // HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
1114  cmd_buf[1] = 0x13; // Output report 13
+
1115  cmd_buf[2] = 0x04 | (HIDBuffer[2] & 0x01); // Keep the rumble bit and sets bit 2
+
1116  HID_Command(cmd_buf, 3);
+
1117 }
+
1118 
+
1119 void WII::enableIRCamera2(){
+
1120  uint8_t cmd_buf[3];
+
1121  cmd_buf[0] = 0xA2; // HID BT DATA_request (0xA0) | Report Type (Output 0x02)
+
1122  cmd_buf[1] = 0x1A; // Output report 1A
+
1123  cmd_buf[2] = 0x04 | (HIDBuffer[2] & 0x01); // Keep the rumble bit and sets bit 2
+
1124  HID_Command(cmd_buf, 3);
+
1125 }
+
1126 
+
1127 void WII::writeSensitivityBlock1(){
+
1128  uint8_t buf[9];
+
1129  buf[0] = 0x00;
+
1130  buf[1] = 0x00;
+
1131  buf[2] = 0x00;
+
1132  buf[3] = 0x00;
+
1133  buf[4] = 0x00;
+
1134  buf[5] = 0x00;
+
1135  buf[6] = 0x90;
+
1136  buf[7] = 0x00;
+
1137  buf[8] = 0x41;
+
1138 
+
1139  writeData(0xB00000, 9, buf);
+
1140 }
+
1141 
+
1142 void WII::writeSensitivityBlock2(){
+
1143  uint8_t buf[2];
+
1144  buf[0] = 0x40;
+
1145  buf[1] = 0x00;
+
1146 
+
1147  writeData(0xB0001A, 2, buf);
+
1148 }
+
1149 
+
1150 void WII::write0x08Value(){
+
1151  uint8_t cmd = 0x08;
+
1152  writeData(0xb00030, 1, &cmd);
+
1153 }
+
1154 
+
1155 void WII::setWiiModeNumber(uint8_t mode_number){ // mode_number in hex i.e. 0x03 for extended mode
+
1156  writeData(0xb00033,1,&mode_number);
+
1157 }
+
1158 #endif
+
+ + + + diff --git a/_wii_8h.html b/_wii_8h.html index a72c3485..f6c1cca6 100644 --- a/_wii_8h.html +++ b/_wii_8h.html @@ -118,6 +118,8 @@ Classes + + @@ -207,6 +209,8 @@ Enumerations

Macros

#define WIICAMERA
 
#define L2CAP_WAIT   0
 
#define L2CAP_CONTROL_SUCCESS   1
+

Definition at line 46 of file Wii.h.

+
@@ -219,6 +223,8 @@ Enumerations
+

Definition at line 45 of file Wii.h.

+
@@ -231,6 +237,8 @@ Enumerations
+

Definition at line 67 of file Wii.h.

+
@@ -243,6 +251,8 @@ Enumerations
+

Definition at line 68 of file Wii.h.

+
@@ -255,6 +265,8 @@ Enumerations
+

Definition at line 65 of file Wii.h.

+
@@ -267,6 +279,8 @@ Enumerations
+

Definition at line 66 of file Wii.h.

+
@@ -279,6 +293,8 @@ Enumerations
+

Definition at line 71 of file Wii.h.

+
@@ -291,6 +307,8 @@ Enumerations
+

Definition at line 72 of file Wii.h.

+
@@ -303,6 +321,8 @@ Enumerations
+

Definition at line 40 of file Wii.h.

+
@@ -315,6 +335,8 @@ Enumerations
+

Definition at line 39 of file Wii.h.

+
@@ -327,6 +349,8 @@ Enumerations
+

Definition at line 52 of file Wii.h.

+
@@ -339,6 +363,8 @@ Enumerations
+

Definition at line 35 of file Wii.h.

+
@@ -351,6 +377,8 @@ Enumerations
+

Definition at line 69 of file Wii.h.

+
@@ -363,6 +391,8 @@ Enumerations
+

Definition at line 70 of file Wii.h.

+
@@ -375,6 +405,8 @@ Enumerations
+

Definition at line 49 of file Wii.h.

+
@@ -387,6 +419,8 @@ Enumerations
+

Definition at line 57 of file Wii.h.

+
@@ -399,6 +433,8 @@ Enumerations
+

Definition at line 58 of file Wii.h.

+
@@ -411,6 +447,8 @@ Enumerations
+

Definition at line 61 of file Wii.h.

+
@@ -423,6 +461,8 @@ Enumerations
+

Definition at line 62 of file Wii.h.

+
@@ -435,6 +475,8 @@ Enumerations
+

Definition at line 55 of file Wii.h.

+
@@ -447,6 +489,8 @@ Enumerations
+

Definition at line 59 of file Wii.h.

+
@@ -459,6 +503,8 @@ Enumerations
+

Definition at line 60 of file Wii.h.

+
@@ -471,6 +517,8 @@ Enumerations
+

Definition at line 56 of file Wii.h.

+
@@ -483,6 +531,8 @@ Enumerations
+

Definition at line 47 of file Wii.h.

+
@@ -495,6 +545,8 @@ Enumerations
+

Definition at line 43 of file Wii.h.

+
@@ -507,6 +559,8 @@ Enumerations
+

Definition at line 41 of file Wii.h.

+
@@ -519,6 +573,8 @@ Enumerations
+

Definition at line 51 of file Wii.h.

+
@@ -531,6 +587,8 @@ Enumerations
+

Definition at line 36 of file Wii.h.

+
@@ -543,6 +601,8 @@ Enumerations
+

Definition at line 48 of file Wii.h.

+
@@ -555,6 +615,8 @@ Enumerations
+

Definition at line 32 of file Wii.h.

+
@@ -567,6 +629,8 @@ Enumerations
+

Definition at line 78 of file Wii.h.

+
@@ -579,6 +643,8 @@ Enumerations
+

Definition at line 79 of file Wii.h.

+
@@ -591,6 +657,8 @@ Enumerations
+

Definition at line 81 of file Wii.h.

+
@@ -603,6 +671,8 @@ Enumerations
+

Definition at line 75 of file Wii.h.

+
@@ -615,6 +685,23 @@ Enumerations
+

Definition at line 76 of file Wii.h.

+ +
+ + +
+
+ + + + +
#define WIICAMERA
+
+

You will have to uncomment this to use the IR camera

+ +

Definition at line 29 of file Wii.h.

+

Enumeration Type Documentation

@@ -627,19 +714,24 @@ Enumerations
+

Enum used to read the joystick on the Nunchuck.

Enumerator
HatX  +

Read the x-axis on the Nunchuck joystick.

HatY  +

Read the y-axis on the Nunchuck joystick.

+

Definition at line 84 of file Wii.h.

+
diff --git a/_wii_8h_source.html b/_wii_8h_source.html index 044c800e..254de528 100644 --- a/_wii_8h_source.html +++ b/_wii_8h_source.html @@ -115,248 +115,233 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
25 #include "BTD.h"
26 #include "controllerEnums.h"
27 
-
28 //#define WIICAMERA //uncomment to enable IR camera
-
29 
-
30 /* Bluetooth L2CAP states for L2CAP_task() */
-
31 #define L2CAP_WAIT 0
-
32 
-
33 // These states are used if the Wiimote is the host
-
34 #define L2CAP_CONTROL_SUCCESS 1
-
35 #define L2CAP_INTERRUPT_SETUP 2
-
36 
-
37 // These states are used if the Arduino is the host
-
38 #define L2CAP_CONTROL_CONNECT_REQUEST 3
-
39 #define L2CAP_CONTROL_CONFIG_REQUEST 4
-
40 #define L2CAP_INTERRUPT_CONNECT_REQUEST 5
-
41 
-
42 #define L2CAP_INTERRUPT_CONFIG_REQUEST 6
-
43 
-
44 #define L2CAP_CHECK_MOTION_PLUS_STATE 7
-
45 #define L2CAP_CHECK_EXTENSION_STATE 8
-
46 #define L2CAP_INIT_MOTION_PLUS_STATE 9
-
47 #define L2CAP_LED_STATE 10
-
48 #define L2CAP_DONE 11
-
49 
-
50 #define L2CAP_INTERRUPT_DISCONNECT 12
-
51 #define L2CAP_CONTROL_DISCONNECT 13
-
52 
-
53 /* L2CAP event flags */
-
54 #define L2CAP_FLAG_CONTROL_CONNECTED 0x001
-
55 #define L2CAP_FLAG_INTERRUPT_CONNECTED 0x002
-
56 #define L2CAP_FLAG_CONFIG_CONTROL_SUCCESS 0x004
-
57 #define L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS 0x008
-
58 #define L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE 0x040
-
59 #define L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE 0x080
-
60 #define L2CAP_FLAG_CONNECTION_CONTROL_REQUEST 0x100
-
61 #define L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST 0x200
-
62 
-
63 /* Macros for L2CAP event flag tests */
-
64 #define l2cap_connected_control_flag (l2cap_event_flag & L2CAP_FLAG_CONTROL_CONNECTED)
-
65 #define l2cap_connected_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_INTERRUPT_CONNECTED)
-
66 #define l2cap_config_success_control_flag (l2cap_event_flag & L2CAP_FLAG_CONFIG_CONTROL_SUCCESS)
-
67 #define l2cap_config_success_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS)
-
68 #define l2cap_disconnect_response_control_flag (l2cap_event_flag & L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE)
-
69 #define l2cap_disconnect_response_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE)
-
70 #define l2cap_connection_request_control_flag (l2cap_event_flag & L2CAP_FLAG_CONNECTION_CONTROL_REQUEST)
-
71 #define l2cap_connection_request_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST)
-
72 
-
73 /* Wii event flags */
-
74 #define WII_FLAG_MOTION_PLUS_CONNECTED 0x400
-
75 #define WII_FLAG_NUNCHUCK_CONNECTED 0x800
-
76 
-
77 #define motion_plus_connected_flag (l2cap_event_flag & WII_FLAG_MOTION_PLUS_CONNECTED)
-
78 #define nunchuck_connected_flag (l2cap_event_flag & WII_FLAG_NUNCHUCK_CONNECTED)
-
79 
-
80 #define PAIR 1
-
81 
-
82 enum Hat {
-
83  HatX = 0,
-
84  HatY = 1,
-
85 };
-
86 
-
87 class WII : public BluetoothService {
-
88 public:
-
89  WII(BTD *p, bool pair=false);
-
90 
-
91  // BluetoothService implementation
-
92  virtual void ACLData(uint8_t* ACLData); // Used to pass acldata to the services
-
93  virtual void Run(); // Used to run part of the state maschine
-
94  virtual void Reset(); // Use this to reset the service
-
95  virtual void disconnect(); // Use this void to disconnect any of the controllers
-
96 
-
97  /*
-
98  getButtonPress will return true as long as the button is held down
-
99  While getButtonClick will only return it once
-
100  So you instance if you need to increase a variable once you would use getButtonClick,
-
101  but if you need to drive a robot forward you would use getButtonPress
-
102  */
-
103  bool getButtonPress(Button b); // This will read true as long as the button is held down
-
104  bool getButtonClick(Button b); // This will only be true when the button is clicked the first time
-
105 
-
106  uint8_t getAnalogHat(Hat a); // Used to read the joystick of the Nunchuck
-
107 
-
108  double getPitch() { return pitch; }; // Fusioned angle using a complimentary filter if the Motion Plus is connected
-
109  double getRoll() { return roll; }; // Fusioned angle using a complimentary filter if the Motion Plus is connected
-
110  double getYaw() { return gyroYaw; }; // This is the yaw calculated by the gyro
-
111 
-
112  void setAllOff(); // Turn both rumble and all LEDs off
-
113  void setRumbleOff();
-
114  void setRumbleOn();
-
115  void setRumbleToggle();
-
116  void setLedOff(LED a);
-
117  void setLedOn(LED a);
-
118  void setLedToggle(LED a);
-
119  void setLedStatus(); // This will set the LEDs, so the user can see which connections are active
-
120 
-
121  bool wiimoteConnected; // Variable used to indicate if a Wiimote is connected
-
122  bool nunchuckConnected; // Variable used to indicate if a Nunchuck controller is connected
-
123  bool motionPlusConnected; // Variable used to indicate if a Nunchuck controller is connected
-
124 
-
125  /* IMU Data, might be usefull if you need to do something more advanced than just calculating the angle */
-
126 
-
127  double wiiMotePitch; // Pitch and roll calculated from the accelerometer inside the Wiimote
-
128  double wiiMoteRoll;
-
129  double nunchuckPitch; // Pitch and roll calculated from the accelerometer inside the Nunchuck
-
130  double nunchuckRoll;
-
131 
-
132  int16_t accX; // Accelerometer values used to calculate pitch and roll
-
133  int16_t accY;
-
134  int16_t accZ;
-
135 
-
136  /* Variables for the gyro inside the Motion Plus */
-
137  double gyroPitch; // This is the pitch calculated by the gyro - use this to tune pitchGyroScale
-
138  double gyroRoll; // This is the roll calculated by the gyro - use this to tune rollGyroScale
-
139  double gyroYaw; // This is the yaw calculated by the gyro - use this to tune yawGyroScale
-
140 
-
141  double pitchGyroSpeed; // The speed in deg/s from the gyro
- -
143  double yawGyroSpeed;
-
144 
-
145  uint16_t pitchGyroScale; // You might need to fine-tune these values
-
146  uint16_t rollGyroScale;
-
147  uint16_t yawGyroScale;
-
148 
-
149  int16_t gyroYawRaw; // Raw value read directly from the Motion Plus
-
150  int16_t gyroRollRaw;
-
151  int16_t gyroPitchRaw;
-
152 
-
153  int16_t gyroYawZero; // These values are set when the controller is first initialized
-
154  int16_t gyroRollZero;
-
155  int16_t gyroPitchZero;
-
156 
-
157  uint8_t getBatteryLevel() { return batteryLevel; };
-
158  uint8_t getWiiState() { return wiiState; };
-
159 
-
160 #ifdef WIICAMERA
-
161  /* These are functions for the IR camera */
-
162  void IRinitialize(); // Initialises the camera as per the steps from http://wiibrew.org/wiki/Wiimote#IR_Camera
-
163 
-
164  uint16_t getIRx1() { return IR_object_x1; }; // IR object 1 x position (0-1023)
-
165  uint16_t getIRy1() { return IR_object_y1; }; // IR object 1 y position (0-767)
-
166  uint8_t getIRs1() { return IR_object_s1; }; // IR object 1 size (0-15)
-
167 
-
168  uint16_t getIRx2() { return IR_object_x2; };
-
169  uint16_t getIRy2() { return IR_object_y2; };
-
170  uint8_t getIRs2() { return IR_object_s2; };
-
171 
-
172  uint16_t getIRx3() { return IR_object_x3; };
-
173  uint16_t getIRy3() { return IR_object_y3; };
-
174  uint8_t getIRs3() { return IR_object_s3; };
-
175 
-
176  uint16_t getIRx4() { return IR_object_x4; };
-
177  uint16_t getIRy4() { return IR_object_y4; };
-
178  uint8_t getIRs4() { return IR_object_s4; };
-
179 
-
180  bool isIRCameraEnabled() { return (wiiState & 0x08); };
-
181 #endif
-
182 
-
183 private:
-
184  /* Mandatory members */
-
185  BTD *pBtd;
-
186 
-
187  void L2CAP_task(); // L2CAP state machine
-
188 
-
189  /* Variables filled from HCI event management */
-
190  uint16_t hci_handle;
-
191  bool activeConnection; // Used to indicate if it's already has established a connection
-
192 
-
193  /* variables used by high level L2CAP task */
-
194  uint8_t l2cap_state;
-
195  uint16_t l2cap_event_flag;// l2cap flags of received bluetooth events
-
196 
-
197  uint32_t ButtonState;
-
198  uint32_t OldButtonState;
-
199  uint32_t ButtonClickState;
-
200  uint8_t hatValues[2];
-
201 
-
202  uint8_t HIDBuffer[3];// Used to store HID commands
-
203 
-
204  uint16_t stateCounter;
-
205  bool unknownExtensionConnected;
-
206  bool extensionConnected;
-
207 
-
208  /* L2CAP Channels */
-
209  uint8_t control_scid[2]; // L2CAP source CID for HID_Control
-
210  uint8_t control_dcid[2]; // 0x0060
-
211  uint8_t interrupt_scid[2]; // L2CAP source CID for HID_Interrupt
-
212  uint8_t interrupt_dcid[2]; // 0x0061
-
213  uint8_t identifier; // Identifier for connection
-
214 
-
215  /* HID Commands */
-
216  void HID_Command(uint8_t* data, uint8_t nbytes);
-
217  void setReportMode(bool continuous, uint8_t mode);
-
218  void statusRequest();
-
219 
-
220  void writeData(uint32_t offset, uint8_t size, uint8_t* data);
-
221  void initExtension1();
-
222  void initExtension2();
-
223 
-
224  void readData(uint32_t offset, uint16_t size, bool EEPROM);
-
225  void readExtensionType();
-
226  void readCalData();
-
227 
-
228  void checkMotionPresent(); // Used to see if a Motion Plus is connected to the Wiimote
-
229  void initMotionPlus();
-
230  void activateMotionPlus();
-
231 
-
232  double pitch; // Fusioned angle using a complimentary filter if the Motion Plus is connected
-
233  double roll; // Fusioned angle using a complimentary filter if the Motion Plus is connected
-
234 
-
235  bool activateNunchuck;
-
236  bool motionValuesReset; // This bool is true when the gyro values has been reset
-
237  unsigned long timer;
-
238 
-
239  uint8_t wiiState; // Stores the value in l2capinbuf[12] - (0x01: Battery is nearly empty), (0x02: An Extension Controller is connected), (0x04: Speaker enabled), (0x08: IR enabled), (0x10: LED1, 0x20: LED2, 0x40: LED3, 0x80: LED4)
-
240  uint8_t batteryLevel;
-
241 
-
242 #ifdef WIICAMERA
-
243  /* Private function and variables for the readings from teh IR Camera */
-
244  void enableIRCamera1(); // Sets bit 2 of output report 13
-
245  void enableIRCamera2(); // Sets bit 2 of output report 1A
-
246  void writeSensitivityBlock1();
-
247  void writeSensitivityBlock2();
-
248  void write0x08Value();
-
249  void setWiiModeNumber(uint8_t mode_number);
-
250 
-
251  uint16_t IR_object_x1; // IR x position 10 bits
-
252  uint16_t IR_object_y1; // IR y position 10 bits
-
253  uint8_t IR_object_s1; // IR size value
-
254  uint16_t IR_object_x2;
-
255  uint16_t IR_object_y2;
-
256  uint8_t IR_object_s2;
-
257  uint16_t IR_object_x3; // IR x position 10 bits
-
258  uint16_t IR_object_y3; // IR y position 10 bits
-
259  uint8_t IR_object_s3; // IR size value
-
260  uint16_t IR_object_x4;
-
261  uint16_t IR_object_y4;
-
262  uint8_t IR_object_s4;
-
263 #endif
-
264 };
-
265 #endif
+
29 #define WIICAMERA
+
30 
+
31 /* Bluetooth L2CAP states for L2CAP_task() */
+
32 #define L2CAP_WAIT 0
+
33 
+
34 // These states are used if the Wiimote is the host
+
35 #define L2CAP_CONTROL_SUCCESS 1
+
36 #define L2CAP_INTERRUPT_SETUP 2
+
37 
+
38 // These states are used if the Arduino is the host
+
39 #define L2CAP_CONTROL_CONNECT_REQUEST 3
+
40 #define L2CAP_CONTROL_CONFIG_REQUEST 4
+
41 #define L2CAP_INTERRUPT_CONNECT_REQUEST 5
+
42 
+
43 #define L2CAP_INTERRUPT_CONFIG_REQUEST 6
+
44 
+
45 #define L2CAP_CHECK_MOTION_PLUS_STATE 7
+
46 #define L2CAP_CHECK_EXTENSION_STATE 8
+
47 #define L2CAP_INIT_MOTION_PLUS_STATE 9
+
48 #define L2CAP_LED_STATE 10
+
49 #define L2CAP_DONE 11
+
50 
+
51 #define L2CAP_INTERRUPT_DISCONNECT 12
+
52 #define L2CAP_CONTROL_DISCONNECT 13
+
53 
+
54 /* L2CAP event flags */
+
55 #define L2CAP_FLAG_CONTROL_CONNECTED 0x001
+
56 #define L2CAP_FLAG_INTERRUPT_CONNECTED 0x002
+
57 #define L2CAP_FLAG_CONFIG_CONTROL_SUCCESS 0x004
+
58 #define L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS 0x008
+
59 #define L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE 0x040
+
60 #define L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE 0x080
+
61 #define L2CAP_FLAG_CONNECTION_CONTROL_REQUEST 0x100
+
62 #define L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST 0x200
+
63 
+
64 /* Macros for L2CAP event flag tests */
+
65 #define l2cap_connected_control_flag (l2cap_event_flag & L2CAP_FLAG_CONTROL_CONNECTED)
+
66 #define l2cap_connected_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_INTERRUPT_CONNECTED)
+
67 #define l2cap_config_success_control_flag (l2cap_event_flag & L2CAP_FLAG_CONFIG_CONTROL_SUCCESS)
+
68 #define l2cap_config_success_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS)
+
69 #define l2cap_disconnect_response_control_flag (l2cap_event_flag & L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE)
+
70 #define l2cap_disconnect_response_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE)
+
71 #define l2cap_connection_request_control_flag (l2cap_event_flag & L2CAP_FLAG_CONNECTION_CONTROL_REQUEST)
+
72 #define l2cap_connection_request_interrupt_flag (l2cap_event_flag & L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST)
+
73 
+
74 /* Wii event flags */
+
75 #define WII_FLAG_MOTION_PLUS_CONNECTED 0x400
+
76 #define WII_FLAG_NUNCHUCK_CONNECTED 0x800
+
77 
+
78 #define motion_plus_connected_flag (l2cap_event_flag & WII_FLAG_MOTION_PLUS_CONNECTED)
+
79 #define nunchuck_connected_flag (l2cap_event_flag & WII_FLAG_NUNCHUCK_CONNECTED)
+
80 
+
81 #define PAIR 1
+
82 
+
84 enum Hat {
+
86  HatX = 0,
+
88  HatY = 1,
+
89 };
+
90 
+
96 class WII : public BluetoothService {
+
97 public:
+
104  WII(BTD *p, bool pair=false);
+
105 
+
111  virtual void ACLData(uint8_t* ACLData);
+
113  virtual void Run();
+
115  virtual void Reset();
+
117  virtual void disconnect();
+
127  bool getButtonPress(Button b);
+
128  bool getButtonClick(Button b);
+
137  uint8_t getAnalogHat(Hat a);
+
143  uint16_t getAnalogHat(AnalogHat a);
+
144 
+
149  double getPitch() { return pitch; };
+
154  double getRoll() { return roll; };
+
161  double getYaw() { return gyroYaw; };
+
162 
+
164  void setAllOff();
+
166  void setRumbleOff();
+
168  void setRumbleOn();
+
170  void setRumbleToggle();
+
175  void setLedOff(LED a);
+
180  void setLedOn(LED a);
+
185  void setLedToggle(LED a);
+
195  void setLedStatus();
+
196 
+
201  uint8_t getBatteryLevel() { return batteryLevel; };
+
206  uint8_t getWiiState() { return wiiState; };
+
211  bool wiimoteConnected;
+ + + +
220  /* IMU Data, might be usefull if you need to do something more advanced than just calculating the angle */
+
221 
+
224  double wiimotePitch;
+
225  double wiimoteRoll;
+ +
231  double nunchuckRoll;
+
236  int16_t accX;
+
237  int16_t accY;
+
238  int16_t accZ;
+
241  /* Variables for the gyro inside the Motion Plus */
+
243  double gyroPitch;
+
245  double gyroRoll;
+
247  double gyroYaw;
+
248 
+ + +
253  double yawGyroSpeed;
+
258  uint16_t pitchGyroScale;
+
259  uint16_t rollGyroScale;
+
260  uint16_t yawGyroScale;
+
265  int16_t gyroYawRaw;
+
266  int16_t gyroRollRaw;
+
267  int16_t gyroPitchRaw;
+
272  int16_t gyroYawZero;
+
273  int16_t gyroRollZero;
+
274  int16_t gyroPitchZero;
+
277 #ifdef WIICAMERA
+
278 
+
282  void IRinitialize();
+
283 
+
285  uint16_t getIRx1() { return IR_object_x1; };
+
287  uint16_t getIRy1() { return IR_object_y1; };
+
289  uint8_t getIRs1() { return IR_object_s1; };
+
290 
+
292  uint16_t getIRx2() { return IR_object_x2; };
+
294  uint16_t getIRy2() { return IR_object_y2; };
+
296  uint8_t getIRs2() { return IR_object_s2; };
+
297 
+
299  uint16_t getIRx3() { return IR_object_x3; };
+
301  uint16_t getIRy3() { return IR_object_y3; };
+
303  uint8_t getIRs3() { return IR_object_s3; };
+
304 
+
306  uint16_t getIRx4() { return IR_object_x4; };
+
308  uint16_t getIRy4() { return IR_object_y4; };
+
310  uint8_t getIRs4() { return IR_object_s4; };
+
311 
+
317  bool isIRCameraEnabled() { return (wiiState & 0x08); };
+
319 #endif
+
320 
+
321 private:
+
322  /* Mandatory members */
+
323  BTD *pBtd;
+
324 
+
325  void L2CAP_task(); // L2CAP state machine
+
326 
+
327  /* Variables filled from HCI event management */
+
328  uint16_t hci_handle;
+
329  bool activeConnection; // Used to indicate if it's already has established a connection
+
330 
+
331  /* variables used by high level L2CAP task */
+
332  uint8_t l2cap_state;
+
333  uint16_t l2cap_event_flag;// l2cap flags of received bluetooth events
+
334 
+
335  uint32_t ButtonState;
+
336  uint32_t OldButtonState;
+
337  uint32_t ButtonClickState;
+
338  uint16_t hatValues[4];
+
339 
+
340  uint8_t HIDBuffer[3];// Used to store HID commands
+
341 
+
342  uint16_t stateCounter;
+
343  bool unknownExtensionConnected;
+
344  bool extensionConnected;
+
345 
+
346  /* L2CAP Channels */
+
347  uint8_t control_scid[2]; // L2CAP source CID for HID_Control
+
348  uint8_t control_dcid[2]; // 0x0060
+
349  uint8_t interrupt_scid[2]; // L2CAP source CID for HID_Interrupt
+
350  uint8_t interrupt_dcid[2]; // 0x0061
+
351  uint8_t identifier; // Identifier for connection
+
352 
+
353  /* HID Commands */
+
354  void HID_Command(uint8_t* data, uint8_t nbytes);
+
355  void setReportMode(bool continuous, uint8_t mode);
+
356  void statusRequest();
+
357 
+
358  void writeData(uint32_t offset, uint8_t size, uint8_t* data);
+
359  void initExtension1();
+
360  void initExtension2();
+
361 
+
362  void readData(uint32_t offset, uint16_t size, bool EEPROM);
+
363  void readExtensionType();
+
364  void readCalData();
+
365 
+
366  void checkMotionPresent(); // Used to see if a Motion Plus is connected to the Wiimote
+
367  void initMotionPlus();
+
368  void activateMotionPlus();
+
369 
+
370  double pitch; // Fusioned angle using a complimentary filter if the Motion Plus is connected
+
371  double roll; // Fusioned angle using a complimentary filter if the Motion Plus is connected
+
372 
+
373  bool activateNunchuck;
+
374  bool motionValuesReset; // This bool is true when the gyro values has been reset
+
375  unsigned long timer;
+
376 
+
377  uint8_t wiiState; // Stores the value in l2capinbuf[12] - (0x01: Battery is nearly empty), (0x02: An Extension Controller is connected), (0x04: Speaker enabled), (0x08: IR enabled), (0x10: LED1, 0x20: LED2, 0x40: LED3, 0x80: LED4)
+
378  uint8_t batteryLevel;
+
379 
+
380 #ifdef WIICAMERA
+
381  /* Private function and variables for the readings from teh IR Camera */
+
382  void enableIRCamera1(); // Sets bit 2 of output report 13
+
383  void enableIRCamera2(); // Sets bit 2 of output report 1A
+
384  void writeSensitivityBlock1();
+
385  void writeSensitivityBlock2();
+
386  void write0x08Value();
+
387  void setWiiModeNumber(uint8_t mode_number);
+
388 
+
389  uint16_t IR_object_x1; // IR x position 10 bits
+
390  uint16_t IR_object_y1; // IR y position 10 bits
+
391  uint8_t IR_object_s1; // IR size value
+
392  uint16_t IR_object_x2;
+
393  uint16_t IR_object_y2;
+
394  uint8_t IR_object_s2;
+
395  uint16_t IR_object_x3; // IR x position 10 bits
+
396  uint16_t IR_object_y3; // IR y position 10 bits
+
397  uint8_t IR_object_s3; // IR size value
+
398  uint16_t IR_object_x4;
+
399  uint16_t IR_object_y4;
+
400  uint8_t IR_object_s4;
+
401 #endif
+
402 };
+
403 #endif
diff --git a/_wii_camera_readme_8md.html b/_wii_camera_readme_8md.html index 15d9ad47..c2faa874 100644 --- a/_wii_camera_readme_8md.html +++ b/_wii_camera_readme_8md.html @@ -84,10 +84,12 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
/Users/Lauszus/GitHub/USB_Host_Shield_2.0/WiiCameraReadme.md File Reference
diff --git a/_x_b_o_x_u_s_b_8cpp.html b/_wii_camera_readme_8md_source.html similarity index 60% rename from _x_b_o_x_u_s_b_8cpp.html rename to _wii_camera_readme_8md_source.html index bc188c41..58fe0349 100644 --- a/_x_b_o_x_u_s_b_8cpp.html +++ b/_wii_camera_readme_8md_source.html @@ -4,7 +4,7 @@ -USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/XBOXUSB.cpp File Reference +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/WiiCameraReadme.md Source File @@ -64,6 +64,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
  • File Members
  • +
    - -
    -
    -
    XBOXUSB.cpp File Reference
    +
    /Users/Lauszus/GitHub/USB_Host_Shield_2.0/WiiCameraReadme.md
    -
    #include "XBOXUSB.h"
    -
    -Include dependency graph for XBOXUSB.cpp:
    -
    -
    - - -
    -
    - - - -

    -Macros

    #define DEBUG
     
    -

    Macro Definition Documentation

    - -
    -
    - - - - -
    #define DEBUG
    -
    - -
    -
    -
    +Go to the documentation of this file.
    1 Please see <http://wiibrew.org/wiki/Wiimote#IR_Camera> for the complete capabilities of the Wii camera. The IR camera code was written based on the above website and with support from Kristian Lauszus.
    +
    2 
    +
    3 Must omit the "." in the name of the USB_Host_Shiled_2.0 library folder when inserting into the Arudino library folder.
    +
    4 
    +
    5 This library is large, if you run into memory problems when uploading to the arduino, comment out the #define DEBUG in the BTD.cpp and Wii.cpp files.
    +
    6 
    +
    7 To enable the IR camera code, uncomment #define WIICAMERA in Wii.h.
    +
    8 
    +
    9 This library impliments the following settings:
    +
    10 
    +
    11 * Report sensitivity mode: 00 00 00 00 00 00 90 00 41 40 00 Suggested by inio (high sensitivity)
    +
    12 * Data Format: Extended mode (0x03). Full mode is not working yet. The output reports 0x3e and 0x3f need tampering with
    +
    13  * In this mode the camera outputs x and y corridinates and a size dimension for the 4 brightest points.
    +
    14 
    +
    15 Again, read through <http://wiibrew.org/wiki/Wiimote#IR_Camera> to get an understanding of the camera and its settings.
    +
    diff --git a/_x_b_o_x_r_e_c_v_8cpp.html b/_x_b_o_x_r_e_c_v_8cpp.html index f7601860..1d8ddf03 100644 --- a/_x_b_o_x_r_e_c_v_8cpp.html +++ b/_x_b_o_x_r_e_c_v_8cpp.html @@ -99,7 +99,9 @@ Include dependency graph for XBOXRECV.cpp: - + +

    Go to the source code of this file.

    +
    @@ -121,6 +123,8 @@ Variables

    Macros

    #define DEBUG
    +

    Definition at line 21 of file XBOXRECV.cpp.

    +

    Variable Documentation

    @@ -141,12 +145,14 @@ Variables
    0x01
    }
    +

    Definition at line 25 of file XBOXRECV.cpp.

    + diff --git a/_x_b_o_x_r_e_c_v_8cpp_source.html b/_x_b_o_x_r_e_c_v_8cpp_source.html new file mode 100644 index 00000000..599d217d --- /dev/null +++ b/_x_b_o_x_r_e_c_v_8cpp_source.html @@ -0,0 +1,639 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/XBOXRECV.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    USB_Host_Shield_2.0 +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    XBOXRECV.cpp
    +
    +
    +Go to the documentation of this file.
    1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
    +
    2 
    +
    3  This software may be distributed and modified under the terms of the GNU
    +
    4  General Public License version 2 (GPL2) as published by the Free Software
    +
    5  Foundation and appearing in the file GPL2.TXT included in the packaging of
    +
    6  this file. Please note that GPL2 Section 2[b] requires that all works based
    +
    7  on this software must also be made publicly available under the terms of
    +
    8  the GPL2 ("Copyleft").
    +
    9 
    +
    10  Contact information
    +
    11  -------------------
    +
    12 
    +
    13  Kristian Lauszus, TKJ Electronics
    +
    14  Web : http://www.tkjelectronics.com
    +
    15  e-mail : kristianl@tkjelectronics.com
    +
    16 
    +
    17  getBatteryLevel and checkStatus functions made by timstamp.co.uk found using BusHound from Perisoft.net
    +
    18  */
    +
    19 
    +
    20 #include "XBOXRECV.h"
    +
    21 #define DEBUG // Uncomment to print data for debugging
    +
    22 //#define EXTRADEBUG // Uncomment to get even more debugging data
    +
    23 //#define PRINTREPORT // Uncomment to print the report send by the Xbox 360 Controller
    +
    24 
    +
    25 const uint8_t LEDS[] PROGMEM = {
    +
    26  0x02, // LED1
    +
    27  0x03, // LED2
    +
    28  0x04, // LED3
    +
    29  0x05, // LED4
    +
    30  0x01 // ALL - Used to blink all LEDs
    +
    31  };
    +
    32 const uint16_t BUTTONS[] PROGMEM = {
    +
    33  0x0100, // UP
    +
    34  0x0800, // RIGHT
    +
    35  0x0200, // DOWN
    +
    36  0x0400, // LEFT
    +
    37 
    +
    38  0x2000, // BACK
    +
    39  0x1000, // START
    +
    40  0x4000, // L3
    +
    41  0x8000, // R3
    +
    42 
    +
    43  0,0, // Skip L2 and R2 as these are analog buttons
    +
    44  0x0001, // L1
    +
    45  0x0002, // R1
    +
    46 
    +
    47  0x0020, // B
    +
    48  0x0010, // A
    +
    49  0x0040, // X
    +
    50  0x0080, // Y
    +
    51 
    +
    52  0x0004, // XBOX
    +
    53  0x0008 // SYNC
    +
    54 };
    +
    55 
    + +
    57 pUsb(p), // pointer to USB class instance - mandatory
    +
    58 bAddress(0), // device address - mandatory
    +
    59 bPollEnable(false) { // don't start polling before dongle is connected
    +
    60  for(uint8_t i=0; i<XBOX_MAX_ENDPOINTS; i++) {
    +
    61  epInfo[i].epAddr = 0;
    +
    62  epInfo[i].maxPktSize = (i) ? 0 : 8;
    +
    63  epInfo[i].epAttribs = 0;
    + +
    65  }
    +
    66 
    +
    67  if (pUsb) // register in USB subsystem
    +
    68  pUsb->RegisterDeviceClass(this); //set devConfig[] entry
    +
    69 }
    +
    70 
    +
    71 uint8_t XBOXRECV::Init(uint8_t parent, uint8_t port, bool lowspeed) {
    +
    72  uint8_t buf[sizeof(USB_DEVICE_DESCRIPTOR)];
    +
    73  uint8_t rcode;
    +
    74  UsbDevice *p = NULL;
    +
    75  EpInfo *oldep_ptr = NULL;
    +
    76  uint16_t PID;
    +
    77  uint16_t VID;
    +
    78 
    +
    79  // get memory address of USB device address pool
    +
    80  AddressPool &addrPool = pUsb->GetAddressPool();
    +
    81 #ifdef EXTRADEBUG
    +
    82  Notify(PSTR("\r\nXBOXRECV Init"));
    +
    83 #endif
    +
    84  // check if address has already been assigned to an instance
    +
    85  if (bAddress) {
    +
    86 #ifdef DEBUG
    +
    87  Notify(PSTR("\r\nAddress in use"));
    +
    88 #endif
    + +
    90  }
    +
    91 
    +
    92  // Get pointer to pseudo device with address 0 assigned
    +
    93  p = addrPool.GetUsbDevicePtr(0);
    +
    94 
    +
    95  if (!p) {
    +
    96 #ifdef DEBUG
    +
    97  Notify(PSTR("\r\nAddress not found"));
    +
    98 #endif
    + +
    100  }
    +
    101 
    +
    102  if (!p->epinfo) {
    +
    103 #ifdef DEBUG
    +
    104  Notify(PSTR("\r\nepinfo is null"));
    +
    105 #endif
    + +
    107  }
    +
    108 
    +
    109  // Save old pointer to EP_RECORD of address 0
    +
    110  oldep_ptr = p->epinfo;
    +
    111 
    +
    112  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
    +
    113  p->epinfo = epInfo;
    +
    114 
    +
    115  p->lowspeed = lowspeed;
    +
    116 
    +
    117  // Get device descriptor
    +
    118  rcode = pUsb->getDevDescr(0, 0, sizeof(USB_DEVICE_DESCRIPTOR), (uint8_t*)buf);// Get device descriptor - addr, ep, nbytes, data
    +
    119  // Restore p->epinfo
    +
    120  p->epinfo = oldep_ptr;
    +
    121 
    +
    122  if(rcode)
    +
    123  goto FailGetDevDescr;
    +
    124 
    +
    125  VID = ((USB_DEVICE_DESCRIPTOR*)buf)->idVendor;
    +
    126  PID = ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct;
    +
    127 
    +
    128  if(VID != XBOX_VID && VID != MADCATZ_VID) // We just check if it's a xbox receiver using the Vendor ID
    +
    129  goto FailUnknownDevice;
    + +
    131 #ifdef DEBUG
    +
    132  Notify(PSTR("\r\nYou'll need a wireless receiver for this libary to work"));
    +
    133 #endif
    +
    134  goto FailUnknownDevice;
    +
    135  }
    +
    136 
    +
    137  // Allocate new address according to device class
    +
    138  bAddress = addrPool.AllocAddress(parent, false, port);
    +
    139 
    +
    140  if (!bAddress)
    + +
    142 
    +
    143  // Extract Max Packet Size from device descriptor
    +
    144  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
    +
    145 
    +
    146  // Assign new address to the device
    +
    147  rcode = pUsb->setAddr( 0, 0, bAddress );
    +
    148  if (rcode) {
    +
    149  p->lowspeed = false;
    +
    150  addrPool.FreeAddress(bAddress);
    +
    151  bAddress = 0;
    +
    152 #ifdef DEBUG
    +
    153  Notify(PSTR("\r\nsetAddr: "));
    +
    154 #endif
    +
    155  PrintHex<uint8_t>(rcode);
    +
    156  return rcode;
    +
    157  }
    +
    158 #ifdef EXTRADEBUG
    +
    159  Notify(PSTR("\r\nAddr: "));
    +
    160  PrintHex<uint8_t>(bAddress);
    +
    161 #endif
    +
    162  p->lowspeed = false;
    +
    163 
    +
    164  //get pointer to assigned address record
    +
    165  p = addrPool.GetUsbDevicePtr(bAddress);
    +
    166  if (!p)
    + +
    168 
    +
    169  p->lowspeed = lowspeed;
    +
    170 
    +
    171  // Assign epInfo to epinfo pointer - only EP0 is known
    +
    172  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
    +
    173  if (rcode)
    +
    174  goto FailSetDevTblEntry;
    +
    175 
    +
    176  /* The application will work in reduced host mode, so we can save program and data
    +
    177  memory space. After verifying the VID we will use known values for the
    +
    178  configuration values for device, interface, endpoints and HID for the XBOX360 Wireless receiver */
    +
    179 
    +
    180  /* Initialize data structures for endpoints of device */
    +
    181  epInfo[ XBOX_INPUT_PIPE_1 ].epAddr = 0x01; // XBOX 360 report endpoint - poll interval 1ms
    + +
    183  epInfo[ XBOX_INPUT_PIPE_1 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    187  epInfo[ XBOX_OUTPUT_PIPE_1 ].epAddr = 0x01; // XBOX 360 output endpoint - poll interval 8ms
    + +
    189  epInfo[ XBOX_OUTPUT_PIPE_1 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    193 
    +
    194  epInfo[ XBOX_INPUT_PIPE_2 ].epAddr = 0x03; // XBOX 360 report endpoint - poll interval 1ms
    + +
    196  epInfo[ XBOX_INPUT_PIPE_2 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    200  epInfo[ XBOX_OUTPUT_PIPE_2 ].epAddr = 0x03; // XBOX 360 output endpoint - poll interval 8ms
    + +
    202  epInfo[ XBOX_OUTPUT_PIPE_2 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    206 
    +
    207  epInfo[ XBOX_INPUT_PIPE_3 ].epAddr = 0x05; // XBOX 360 report endpoint - poll interval 1ms
    + +
    209  epInfo[ XBOX_INPUT_PIPE_3 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    213  epInfo[ XBOX_OUTPUT_PIPE_3 ].epAddr = 0x05; // XBOX 360 output endpoint - poll interval 8ms
    + +
    215  epInfo[ XBOX_OUTPUT_PIPE_3 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    219 
    +
    220  epInfo[ XBOX_INPUT_PIPE_4 ].epAddr = 0x07; // XBOX 360 report endpoint - poll interval 1ms
    + +
    222  epInfo[ XBOX_INPUT_PIPE_4 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    226  epInfo[ XBOX_OUTPUT_PIPE_4 ].epAddr = 0x07; // XBOX 360 output endpoint - poll interval 8ms
    + +
    228  epInfo[ XBOX_OUTPUT_PIPE_4 ].bmNakPower = USB_NAK_NOWAIT; // Only poll once for interrupt endpoints
    + + + +
    232 
    +
    233  rcode = pUsb->setEpInfoEntry(bAddress, 9, epInfo);
    +
    234  if( rcode )
    +
    235  goto FailSetDevTblEntry;
    +
    236 
    +
    237  delay(200);//Give time for address change
    +
    238 
    +
    239  rcode = pUsb->setConf(bAddress, epInfo[ XBOX_CONTROL_PIPE ].epAddr, 1);
    +
    240  if( rcode )
    +
    241  goto FailSetConf;
    +
    242 
    +
    243 #ifdef DEBUG
    +
    244  Notify(PSTR("\r\nXbox Wireless Receiver Connected\r\n"));
    +
    245 #endif
    +
    246  XboxReceiverConnected = true;
    +
    247  bPollEnable = true;
    +
    248  return 0; // successful configuration
    +
    249 
    +
    250  /* diagnostic messages */
    +
    251 FailGetDevDescr:
    +
    252 #ifdef DEBUG
    +
    253  Notify(PSTR("\r\ngetDevDescr:"));
    +
    254 #endif
    +
    255  goto Fail;
    +
    256 FailSetDevTblEntry:
    +
    257 #ifdef DEBUG
    +
    258  Notify(PSTR("\r\nsetDevTblEn:"));
    +
    259 #endif
    +
    260  goto Fail;
    +
    261 FailSetConf:
    +
    262 #ifdef DEBUG
    +
    263  Notify(PSTR("\r\nsetConf:"));
    +
    264 #endif
    +
    265  goto Fail;
    +
    266 FailUnknownDevice:
    +
    267 #ifdef DEBUG
    +
    268  Notify(PSTR("\r\nUnknown Device Connected - VID: "));
    +
    269  PrintHex<uint16_t>(VID);
    +
    270  Notify(PSTR(" PID: "));
    +
    271  PrintHex<uint16_t>(PID);
    +
    272 #endif
    + +
    274  goto Fail;
    +
    275 Fail:
    +
    276 #ifdef DEBUG
    +
    277  Notify(PSTR("\r\nXbox 360 Init Failed, error code: "));
    +
    278  Serial.print(rcode,HEX);
    +
    279 #endif
    +
    280  Release();
    +
    281  return rcode;
    +
    282 }
    +
    283 
    +
    284 /* Performs a cleanup after failed Init() attempt */
    +
    285 uint8_t XBOXRECV::Release() {
    +
    286  XboxReceiverConnected = false;
    +
    287  for(uint8_t i=0;i<4;i++)
    +
    288  Xbox360Connected[i] = 0x00;
    + +
    290  bAddress = 0;
    +
    291  bPollEnable = false;
    +
    292  return 0;
    +
    293 }
    +
    294 uint8_t XBOXRECV::Poll() {
    +
    295  if (!bPollEnable)
    +
    296  return 0;
    +
    297  if(!timer || ((millis() - timer) > 3000)) { // Run checkStatus every 3 seconds
    +
    298  timer = millis();
    +
    299  checkStatus();
    +
    300  }
    +
    301  uint8_t inputPipe;
    +
    302  uint16_t bufferSize;
    +
    303  for(uint8_t i=0;i<4;i++) {
    +
    304  switch (i) {
    +
    305  case 0: inputPipe = XBOX_INPUT_PIPE_1; break;
    +
    306  case 1: inputPipe = XBOX_INPUT_PIPE_2; break;
    +
    307  case 2: inputPipe = XBOX_INPUT_PIPE_3; break;
    +
    308  case 3: inputPipe = XBOX_INPUT_PIPE_4; break;
    +
    309  }
    +
    310  bufferSize = EP_MAXPKTSIZE; // This is the maximum number of bytes we want to receive
    +
    311  pUsb->inTransfer(bAddress, epInfo[ inputPipe ].epAddr, &bufferSize, readBuf);
    +
    312  if(bufferSize > 0) { // The number of received bytes
    +
    313 #ifdef EXTRADEBUG
    +
    314  Notify(PSTR("Bytes Received: "));
    +
    315  Serial.print(bufferSize);
    +
    316  Notify(PSTR("\r\n"));
    +
    317 #endif
    +
    318  readReport(i);
    +
    319 #ifdef PRINTREPORT
    +
    320  printReport(i,bufferSize); // Uncomment "#define PRINTREPORT" to print the report send by the Xbox 360 Controller
    +
    321 #endif
    +
    322  }
    +
    323  }
    +
    324  return 0;
    +
    325 }
    +
    326 
    +
    327 void XBOXRECV::readReport(uint8_t controller) {
    +
    328  if (readBuf == NULL)
    +
    329  return;
    +
    330  // This report is send when a controller is connected and disconnected
    +
    331  if(readBuf[0] == 0x08 && readBuf[1] != Xbox360Connected[controller]) {
    +
    332  Xbox360Connected[controller] = readBuf[1];
    +
    333 #ifdef DEBUG
    +
    334  Notify(PSTR("Controller "));
    +
    335  Serial.print(controller);
    +
    336 #endif
    +
    337  if(Xbox360Connected[controller]) {
    +
    338 #ifdef DEBUG
    +
    339  char* str = 0;
    +
    340  switch(readBuf[1]) {
    +
    341  case 0x80: str = PSTR(" as controller\r\n"); break;
    +
    342  case 0x40: str = PSTR(" as headset\r\n"); break;
    +
    343  case 0xC0: str = PSTR(" as controller+headset\r\n"); break;
    +
    344  }
    +
    345  Notify(PSTR(": connected"));
    +
    346  Notify(str);
    +
    347 #endif
    +
    348  LED led;
    +
    349  switch (controller) {
    +
    350  case 0: led = LED1; break;
    +
    351  case 1: led = LED2; break;
    +
    352  case 2: led = LED3; break;
    +
    353  case 3: led = LED4; break;
    +
    354  }
    +
    355  setLedOn(controller,led);
    +
    356  }
    +
    357 #ifdef DEBUG
    +
    358  else
    +
    359  Notify(PSTR(": disconnected\r\n"));
    +
    360 #endif
    +
    361  return;
    +
    362  }
    +
    363  // Controller status report
    +
    364  if(readBuf[1] == 0x00 && readBuf[3] & 0x13 && readBuf[4] >= 0x22) {
    +
    365  controllerStatus[controller] = ((uint16_t)readBuf[3] << 8) | readBuf[4];
    +
    366  return;
    +
    367  }
    +
    368  if(readBuf[1] != 0x01) // Check if it's the correct report - the receiver also sends different status reports
    +
    369  return;
    +
    370 
    +
    371  // A controller must be connected if it's sending data
    +
    372  if(!Xbox360Connected[controller])
    +
    373  Xbox360Connected[controller] |= 0x80;
    +
    374 
    +
    375  ButtonState[controller] = (uint32_t)(readBuf[9] | ((uint16_t)readBuf[8] << 8) | ((uint32_t)readBuf[7] << 16) | ((uint32_t)readBuf[6] << 24));
    +
    376 
    +
    377  hatValue[controller][LeftHatX] = (int16_t)(((uint16_t)readBuf[11] << 8) | readBuf[10]);
    +
    378  hatValue[controller][LeftHatY] = (int16_t)(((uint16_t)readBuf[13] << 8) | readBuf[12]);
    +
    379  hatValue[controller][RightHatX] = (int16_t)(((uint16_t)readBuf[15] << 8) | readBuf[14]);
    +
    380  hatValue[controller][RightHatY] = (int16_t)(((uint16_t)readBuf[17] << 8) | readBuf[16]);
    +
    381 
    +
    382  //Notify(PSTR("\r\nButtonState: "));
    +
    383  //PrintHex<uint32_t>(ButtonState[controller]);
    +
    384 
    +
    385  if(ButtonState[controller] != OldButtonState[controller]) {
    +
    386  buttonStateChanged[controller] = true;
    +
    387  ButtonClickState[controller] = (ButtonState[controller] >> 16) & ((~OldButtonState[controller]) >> 16); // Update click state variable, but don't include the two trigger buttons L2 and R2
    +
    388  if(((uint8_t)OldButtonState[controller]) == 0 && ((uint8_t)ButtonState[controller]) != 0) // The L2 and R2 buttons are special as they are analog buttons
    +
    389  R2Clicked[controller] = true;
    +
    390  if((uint8_t)(OldButtonState[controller] >> 8) == 0 && (uint8_t)(ButtonState[controller] >> 8) != 0)
    +
    391  L2Clicked[controller] = true;
    +
    392  OldButtonState[controller] = ButtonState[controller];
    +
    393  }
    +
    394 }
    +
    395 
    +
    396 void XBOXRECV::printReport(uint8_t controller, uint8_t nBytes) { //Uncomment "#define PRINTREPORT" to print the report send by the Xbox 360 Controller
    +
    397 #ifdef PRINTREPORT
    +
    398  if (readBuf == NULL)
    +
    399  return;
    +
    400  Notify(PSTR("Controller "));
    +
    401  Serial.print(controller);
    +
    402  Notify(PSTR(": "));
    +
    403  for(uint8_t i = 0; i < nBytes;i++) {
    +
    404  PrintHex<uint8_t>(readBuf[i]);
    +
    405  Serial.print(" ");
    +
    406  }
    +
    407  Serial.println();
    +
    408 #endif
    +
    409 }
    +
    410 uint8_t XBOXRECV::getButtonPress(uint8_t controller, Button b) {
    +
    411  if(b == L2) // These are analog buttons
    +
    412  return (uint8_t)(ButtonState[controller] >> 8);
    +
    413  else if(b == R2)
    +
    414  return (uint8_t)ButtonState[controller];
    +
    415  return (ButtonState[controller] & ((uint32_t)pgm_read_word(&BUTTONS[(uint8_t)b]) << 16));
    +
    416 }
    +
    417 bool XBOXRECV::getButtonClick(uint8_t controller, Button b) {
    +
    418  if(b == L2) {
    +
    419  if(L2Clicked[controller]) {
    +
    420  L2Clicked[controller] = false;
    +
    421  return true;
    +
    422  }
    +
    423  return false;
    +
    424  }
    +
    425  else if(b == R2) {
    +
    426  if(R2Clicked[controller]) {
    +
    427  R2Clicked[controller] = false;
    +
    428  return true;
    +
    429  }
    +
    430  return false;
    +
    431  }
    +
    432  uint16_t button = pgm_read_word(&BUTTONS[(uint8_t)b]);
    +
    433  bool click = (ButtonClickState[controller] & button);
    +
    434  ButtonClickState[controller] &= ~button; // clear "click" event
    +
    435  return click;
    +
    436 }
    +
    437 int16_t XBOXRECV::getAnalogHat(uint8_t controller, AnalogHat a) {
    +
    438  return hatValue[controller][a];
    +
    439 }
    +
    440 bool XBOXRECV::buttonChanged(uint8_t controller) {
    +
    441  bool state = buttonStateChanged[controller];
    +
    442  buttonStateChanged[controller] = false;
    +
    443  return state;
    +
    444 }
    +
    445 /*
    +
    446 ControllerStatus Breakdown
    +
    447  ControllerStatus[controller] & 0x0001 // 0
    +
    448  ControllerStatus[controller] & 0x0002 // normal batteries, no rechargeable battery pack
    +
    449  ControllerStatus[controller] & 0x0004 // controller starting up / settling
    +
    450  ControllerStatus[controller] & 0x0008 // headset adapter plugged in, but no headphones connected (mute?)
    +
    451  ControllerStatus[controller] & 0x0010 // 0
    +
    452  ControllerStatus[controller] & 0x0020 // 1
    +
    453  ControllerStatus[controller] & 0x0040 // battery level (high bit)
    +
    454  ControllerStatus[controller] & 0x0080 // battery level (low bit)
    +
    455  ControllerStatus[controller] & 0x0100 // 1
    +
    456  ControllerStatus[controller] & 0x0200 // 1
    +
    457  ControllerStatus[controller] & 0x0400 // headset adapter plugged in
    +
    458  ControllerStatus[controller] & 0x0800 // 0
    +
    459  ControllerStatus[controller] & 0x1000 // 1
    +
    460  ControllerStatus[controller] & 0x2000 // 0
    +
    461  ControllerStatus[controller] & 0x4000 // 0
    +
    462  ControllerStatus[controller] & 0x8000 // 0
    +
    463 */
    +
    464 uint8_t XBOXRECV::getBatteryLevel(uint8_t controller) {
    +
    465  uint8_t batteryLevel = ((controllerStatus[controller] & 0x00C0) >> 6) * 33;
    +
    466  if(batteryLevel == 99)
    +
    467  batteryLevel = 100;
    +
    468  return batteryLevel;
    +
    469 }
    +
    470 
    +
    471 void XBOXRECV::XboxCommand(uint8_t controller, uint8_t* data, uint16_t nbytes) {
    +
    472  uint8_t rcode;
    +
    473  uint8_t outputPipe;
    +
    474  switch (controller) {
    +
    475  case 0: outputPipe = XBOX_OUTPUT_PIPE_1; break;
    +
    476  case 1: outputPipe = XBOX_OUTPUT_PIPE_2; break;
    +
    477  case 2: outputPipe = XBOX_OUTPUT_PIPE_3; break;
    +
    478  case 3: outputPipe = XBOX_OUTPUT_PIPE_4; break;
    +
    479  }
    +
    480  rcode = pUsb->outTransfer(bAddress, epInfo[ outputPipe ].epAddr, nbytes, data);
    +
    481 #ifdef EXTRADEBUG
    +
    482  if(rcode)
    +
    483  Notify(PSTR("Error sending Xbox message\r\n"));
    +
    484 #endif
    +
    485 }
    +
    486 void XBOXRECV::setLedRaw(uint8_t controller, uint8_t value) {
    +
    487  writeBuf[0] = 0x00;
    +
    488  writeBuf[1] = 0x00;
    +
    489  writeBuf[2] = 0x08;
    +
    490  writeBuf[3] = value | 0x40;
    +
    491 
    +
    492  XboxCommand(controller, writeBuf, 4);
    +
    493 }
    +
    494 void XBOXRECV::setLedOn(uint8_t controller, LED led) {
    +
    495  if(led != ALL) // All LEDs can't be on a the same time
    +
    496  setLedRaw(controller,(pgm_read_byte(&LEDS[(uint8_t)led]))+4);
    +
    497 }
    +
    498 void XBOXRECV::setLedBlink(uint8_t controller, LED led) {
    +
    499  setLedRaw(controller,pgm_read_byte(&LEDS[(uint8_t)led]));
    +
    500 }
    +
    501 void XBOXRECV::setLedMode(uint8_t controller, LEDMode ledMode) { // This function is used to do some speciel LED stuff the controller supports
    +
    502  setLedRaw(controller,(uint8_t)ledMode);
    +
    503 }
    +
    504 /* PC runs this at interval of approx 2 seconds
    +
    505 Thanks to BusHound from Perisoft.net for the Windows USB Analysis output
    +
    506 Found by timstamp.co.uk
    +
    507 */
    +
    508 void XBOXRECV::checkStatus() {
    +
    509  if(!bPollEnable)
    +
    510  return;
    +
    511  // Get controller info
    +
    512  writeBuf[0] = 0x08;
    +
    513  writeBuf[1] = 0x00;
    +
    514  writeBuf[2] = 0x0f;
    +
    515  writeBuf[3] = 0xc0;
    +
    516  for(uint8_t i=0; i<4; i++) {
    +
    517  XboxCommand(i, writeBuf, 4);
    +
    518  }
    +
    519  // Get battery status
    +
    520  writeBuf[0] = 0x00;
    +
    521  writeBuf[1] = 0x00;
    +
    522  writeBuf[2] = 0x00;
    +
    523  writeBuf[3] = 0x40;
    +
    524  for(uint8_t i=0; i<4; i++) {
    +
    525  if(Xbox360Connected[i])
    +
    526  XboxCommand(i, writeBuf, 4);
    +
    527  }
    +
    528 }
    +
    529 
    +
    530 void XBOXRECV::setRumbleOn(uint8_t controller, uint8_t lValue, uint8_t rValue) {
    +
    531  writeBuf[0] = 0x00;
    +
    532  writeBuf[1] = 0x01;
    +
    533  writeBuf[2] = 0x0f;
    +
    534  writeBuf[3] = 0xc0;
    +
    535  writeBuf[4] = 0x00;
    +
    536  writeBuf[5] = lValue; // big weight
    +
    537  writeBuf[6] = rValue; // small weight
    +
    538 
    +
    539  XboxCommand(controller, writeBuf, 7);
    +
    540 }
    +
    + + + + diff --git a/_x_b_o_x_r_e_c_v_8h.html b/_x_b_o_x_r_e_c_v_8h.html index 015e6fce..b50f1066 100644 --- a/_x_b_o_x_r_e_c_v_8h.html +++ b/_x_b_o_x_r_e_c_v_8h.html @@ -154,17 +154,10 @@ Macros -

    Enumerations

    enum  LEDMode {
    -  ROTATING = 0x0A, +
    enum  LEDMode { ROTATING = 0x0A, FASTBLINK = 0x0B, SLOWBLINK = 0x0C, -ALTERNATING = 0x0D, -
    -  ROTATING = 0x0A, -FASTBLINK = 0x0B, -SLOWBLINK = 0x0C, -ALTERNATING = 0x0D -
    +ALTERNATING = 0x0D }
     
    @@ -179,6 +172,8 @@ Enumerations
    +

    Definition at line 36 of file XBOXRECV.h.

    +
    @@ -191,6 +186,8 @@ Enumerations
    +

    Definition at line 33 of file XBOXRECV.h.

    +
    @@ -203,6 +200,8 @@ Enumerations
    +

    Definition at line 54 of file XBOXRECV.h.

    +
    @@ -215,6 +214,8 @@ Enumerations
    +

    Definition at line 39 of file XBOXRECV.h.

    +
    @@ -227,6 +228,8 @@ Enumerations
    +

    Definition at line 40 of file XBOXRECV.h.

    +
    @@ -239,6 +242,8 @@ Enumerations
    +

    Definition at line 42 of file XBOXRECV.h.

    +
    @@ -251,6 +256,8 @@ Enumerations
    +

    Definition at line 44 of file XBOXRECV.h.

    +
    @@ -263,6 +270,8 @@ Enumerations
    +

    Definition at line 46 of file XBOXRECV.h.

    +
    @@ -275,6 +284,8 @@ Enumerations
    +

    Definition at line 56 of file XBOXRECV.h.

    +
    @@ -287,6 +298,8 @@ Enumerations
    +

    Definition at line 41 of file XBOXRECV.h.

    +
    @@ -299,6 +312,8 @@ Enumerations
    +

    Definition at line 43 of file XBOXRECV.h.

    +
    @@ -311,6 +326,8 @@ Enumerations
    +

    Definition at line 45 of file XBOXRECV.h.

    +
    @@ -323,6 +340,8 @@ Enumerations
    +

    Definition at line 47 of file XBOXRECV.h.

    +
    @@ -335,6 +354,8 @@ Enumerations
    +

    Definition at line 50 of file XBOXRECV.h.

    +
    @@ -347,6 +368,8 @@ Enumerations
    +

    Definition at line 51 of file XBOXRECV.h.

    +
    @@ -359,6 +382,8 @@ Enumerations
    +

    Definition at line 52 of file XBOXRECV.h.

    +

    Enumeration Type Documentation

    @@ -371,6 +396,7 @@ Enumerations
    +

    Enum used to set special LED modes supported by the Xbox controller.

    @@ -380,22 +406,16 @@ Enumerations - - - -
    Enumerator
    ROTATING 
    ALTERNATING 
    ROTATING  -
    FASTBLINK  -
    SLOWBLINK  -
    ALTERNATING  -
    +

    Definition at line 59 of file XBOXRECV.h.

    +
    diff --git a/_x_b_o_x_r_e_c_v_8h_source.html b/_x_b_o_x_r_e_c_v_8h_source.html index db684db8..82f2ab0c 100644 --- a/_x_b_o_x_r_e_c_v_8h_source.html +++ b/_x_b_o_x_r_e_c_v_8h_source.html @@ -145,87 +145,74 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    55 
    56 #define XBOX_MAX_ENDPOINTS 9
    57 
    -
    58 enum LEDMode {
    -
    59  ROTATING = 0x0A,
    -
    60  FASTBLINK = 0x0B,
    -
    61  SLOWBLINK = 0x0C,
    -
    62  ALTERNATING = 0x0D,
    -
    63 };
    -
    64 
    -
    65 class XBOXRECV : public USBDeviceConfig {
    -
    66 public:
    -
    67  XBOXRECV(USB *pUsb);
    -
    68 
    -
    69  // USBDeviceConfig implementation
    -
    70  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
    -
    71  virtual uint8_t Release();
    -
    72  virtual uint8_t Poll();
    -
    73  virtual uint8_t GetAddress() { return bAddress; };
    -
    74  virtual bool isReady() { return bPollEnable; };
    -
    75 
    -
    76  /*
    -
    77  Xbox Controller Readings.
    -
    78  getButtonPress will return true as long as the button is held down
    -
    79  While getButtonClick will only return it once
    -
    80  So for instance if you need to increase a variable once you would use getButtonClick,
    -
    81  but if you need to drive a robot forward you would use getButtonPress
    -
    82  */
    -
    83  uint8_t getButtonPress(uint8_t controller, Button b);
    -
    84  bool getButtonClick(uint8_t controller, Button b);
    -
    85  int16_t getAnalogHat(uint8_t controller, AnalogHat a);
    -
    86 
    -
    87  /* Xbox Controller Command */
    -
    88  void setAllOff(uint8_t controller) { setRumbleOn(controller,0,0); setLedOff(controller); };
    -
    89  void setRumbleOff(uint8_t controller) { setRumbleOn(controller,0,0); };
    -
    90  void setRumbleOn(uint8_t controller, uint8_t lValue, uint8_t rValue);
    -
    91  void setLedRaw(uint8_t controller, uint8_t value);
    -
    92  void setLedOff(uint8_t controller) { setLedRaw(controller,0); };
    -
    93  void setLedOn(uint8_t controller, LED l);
    -
    94  void setLedBlink(uint8_t controller, LED l);
    -
    95  void setLedMode(uint8_t controller, LEDMode lm);
    -
    96  uint8_t getBatteryLevel(uint8_t controller); // Returns the battery level in percentage in 33% steps
    -
    97  bool buttonChanged(uint8_t controller);
    -
    98 
    -
    99  bool XboxReceiverConnected; // True if a wireless receiver is connected
    -
    100  uint8_t Xbox360Connected[4]; // Variable used to indicate if the XBOX 360 controller is successfully connected
    -
    101 
    -
    102 protected:
    -
    103  /* Mandatory members */
    - -
    105  uint8_t bAddress; // device address
    -
    106  EpInfo epInfo[XBOX_MAX_ENDPOINTS]; //endpoint info structure
    -
    107 
    -
    108 private:
    -
    109  bool bPollEnable;
    -
    110 
    -
    111  /* Variables to store the buttons */
    -
    112  uint32_t ButtonState[4];
    -
    113  uint32_t OldButtonState[4];
    -
    114  uint16_t ButtonClickState[4];
    -
    115  int16_t hatValue[4][4];
    -
    116  uint16_t controllerStatus[4];
    -
    117  bool buttonStateChanged[4]; // True if a button has changed
    -
    118 
    -
    119  bool L2Clicked[4]; // These buttons are analog, so we use we use these bools to check if they where clicked or not
    -
    120  bool R2Clicked[4];
    -
    121 
    -
    122  unsigned long timer; // Timing for checkStatus() signals
    -
    123 
    -
    124  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
    -
    125  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
    -
    126 
    -
    127  void readReport(uint8_t controller); // read incoming data
    -
    128  void printReport(uint8_t controller, uint8_t nBytes); // print incoming date - Uncomment for debugging
    -
    129 
    -
    130  /* Private commands */
    -
    131  void XboxCommand(uint8_t controller, uint8_t* data, uint16_t nbytes);
    -
    132  void checkStatus();
    -
    133 };
    -
    134 #endif
    +
    59 enum LEDMode {
    +
    60  ROTATING = 0x0A,
    +
    61  FASTBLINK = 0x0B,
    +
    62  SLOWBLINK = 0x0C,
    +
    63  ALTERNATING = 0x0D,
    +
    64 };
    +
    65 
    +
    71 class XBOXRECV : public USBDeviceConfig {
    +
    72 public:
    +
    77  XBOXRECV(USB *pUsb);
    +
    78 
    +
    87  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
    +
    92  virtual uint8_t Release();
    +
    97  virtual uint8_t Poll();
    +
    102  virtual uint8_t GetAddress() { return bAddress; };
    +
    107  virtual bool isReady() { return bPollEnable; };
    +
    121  uint8_t getButtonPress(uint8_t controller, Button b);
    +
    122  bool getButtonClick(uint8_t controller, Button b);
    +
    132  int16_t getAnalogHat(uint8_t controller, AnalogHat a);
    +
    137  void setAllOff(uint8_t controller) { setRumbleOn(controller,0,0); setLedOff(controller); };
    +
    142  void setRumbleOff(uint8_t controller) { setRumbleOn(controller,0,0); };
    +
    149  void setRumbleOn(uint8_t controller, uint8_t lValue, uint8_t rValue);
    +
    157  void setLedRaw(uint8_t controller, uint8_t value);
    +
    162  void setLedOff(uint8_t controller) { setLedRaw(controller,0); };
    +
    168  void setLedOn(uint8_t controller, LED l);
    +
    174  void setLedBlink(uint8_t controller, LED l);
    +
    180  void setLedMode(uint8_t controller, LEDMode lm);
    +
    186  uint8_t getBatteryLevel(uint8_t controller);
    +
    192  bool buttonChanged(uint8_t controller);
    + +
    198  uint8_t Xbox360Connected[4];
    +
    199 
    +
    200 protected:
    + +
    204  uint8_t bAddress;
    + +
    207 
    +
    208 private:
    +
    209  bool bPollEnable;
    +
    210 
    +
    211  /* Variables to store the buttons */
    +
    212  uint32_t ButtonState[4];
    +
    213  uint32_t OldButtonState[4];
    +
    214  uint16_t ButtonClickState[4];
    +
    215  int16_t hatValue[4][4];
    +
    216  uint16_t controllerStatus[4];
    +
    217  bool buttonStateChanged[4]; // True if a button has changed
    +
    218 
    +
    219  bool L2Clicked[4]; // These buttons are analog, so we use we use these bools to check if they where clicked or not
    +
    220  bool R2Clicked[4];
    +
    221 
    +
    222  unsigned long timer; // Timing for checkStatus() signals
    +
    223 
    +
    224  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
    +
    225  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
    +
    226 
    +
    227  void readReport(uint8_t controller); // read incoming data
    +
    228  void printReport(uint8_t controller, uint8_t nBytes); // print incoming date - Uncomment for debugging
    +
    229 
    +
    230  /* Private commands */
    +
    231  void XboxCommand(uint8_t controller, uint8_t* data, uint16_t nbytes);
    +
    232  void checkStatus();
    +
    233 };
    +
    234 #endif
    diff --git a/_x_b_o_x_u_s_b_8cpp__incl.map b/_x_b_o_x_u_s_b_8cpp__incl.map deleted file mode 100644 index e7993eb3..00000000 --- a/_x_b_o_x_u_s_b_8cpp__incl.map +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/_x_b_o_x_u_s_b_8cpp__incl.md5 b/_x_b_o_x_u_s_b_8cpp__incl.md5 deleted file mode 100644 index a61574df..00000000 --- a/_x_b_o_x_u_s_b_8cpp__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -76c55ae7ec25bbf8c323479d51b760b5 \ No newline at end of file diff --git a/_x_b_o_x_u_s_b_8cpp__incl.png b/_x_b_o_x_u_s_b_8cpp__incl.png deleted file mode 100644 index b13904f3ba5d650359b7385332660038f09a3775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54707 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�Oo0qET$ZO~COx*I)MLIX+C0HO2B> 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%0Dc}modCTaap>IwNGqNfkh%X5cZ!e@jIhv%Qe=Fq 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 - - - - - -USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/XBOXUSB.h File Reference - - - - - - - - - - -
    - -
    -
    XBOXUSB.h File Reference
    -
    -
    -
    #include "WProgram.h"
    -#include "Usb.h"
    -
    -Include dependency graph for XBOXUSB.h:
    -
    -
    - - -
    -
    -This graph shows which files directly or indirectly include this file:
    -
    -
    - - -
    -
    -

    Go to the source code of this file.

    - - - - -

    -Classes

    class  XBOXUSB
     
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    -Macros

    #define EP_MAXPKTSIZE   32
     
    #define EP_INTERRUPT   0x03
     
    #define XBOX_CONTROL_PIPE   0
     
    #define XBOX_INPUT_PIPE   1
     
    #define XBOX_OUTPUT_PIPE   2
     
    #define XBOX_VID   0x045E
     
    #define XBOX_WIRELESS_PID   0x028F
     
    #define XBOX_WIRELESS_RECEIVER_PID   0x0719
     
    #define XBOX_WIRELESS_RECEIVER_THIRD_PARTY_PID   0x0291
     
    #define MADCATZ_VID   0x1BAD
     
    #define XBOX_REPORT_BUFFER_SIZE   14
     
    #define bmREQ_HID_OUT   USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
     
    #define HID_REQUEST_SET_REPORT   0x09
     
    #define XBOX_MAX_ENDPOINTS   3
     
    - - - - - - - - - -

    -Enumerations

    enum  LED {
    -  LED1 = 0, -LED2 = 1, -LED3 = 2, -LED4 = 3, -
    -  LED5 = 4, -LED6 = 5, -LED7 = 6, -LED8 = 7, -
    -  LED9 = 8, -LED10 = 9, -ALL = 4, -ALL = 0x01, -
    -  LED1 = 0x02, -LED2 = 0x03, -LED3 = 0x04, -LED4 = 0x05 -
    - }
     
    enum  LEDMode {
    -  ROTATING = 0x0A, -FASTBLINK = 0x0B, -SLOWBLINK = 0x0C, -ALTERNATING = 0x0D, -
    -  ROTATING = 0x0A, -FASTBLINK = 0x0B, -SLOWBLINK = 0x0C, -ALTERNATING = 0x0D -
    - }
     
    enum  Button {
    -  UP = 0, -RIGHT = 1, -DOWN = 2, -LEFT = 3, -
    -  PLUS = 5, -TWO = 6, -ONE = 7, -MINUS = 8, -
    -  HOME = 9, -Z = 10, -C = 11, -B = 12, -
    -  A = 13, -SELECT = 4, -L3 = 5, -R3 = 6, -
    -  START = 7, -L2 = 8, -R2 = 9, -L1 = 10, -
    -  R1 = 11, -TRIANGLE = 12, -CIRCLE = 13, -CROSS = 14, -
    -  SQUARE = 15, -PS = 16, -MOVE = 17, -T = 18, -
    -  BACK = 4, -X = 14, -Y = 15, -XBOX = 16, -
    -  SYNC = 17, -UP = (2 << 8) | 0x01, -DOWN = (2 << 8) | 0x02, -LEFT = (2 << 8) | 0x04, -
    -  RIGHT = (2 << 8) | 0x08, -START = (2 << 8) | 0x10, -BACK = (2 << 8) | 0x20, -L3 = (2 << 8) | 0x40, -
    -  R3 = (2 << 8) | 0x80, -L1 = (3 << 8) | 0x01, -R1 = (3 << 8) | 0x02, -XBOX = (3 << 8) | 0x04, -
    -  A = (3 << 8) | 0x10, -B = (3 << 8) | 0x20, -X = (3 << 8) | 0x40, -Y = (3 << 8) | 0x80, -
    -  L2 = 4, -R2 = 5 -
    - }
     
    enum  AnalogHat {
    -  LeftHatX = 0, -LeftHatY = 1, -RightHatX = 2, -RightHatY = 3, -
    -  LeftHatX = 6, -LeftHatY = 8, -RightHatX = 10, -RightHatY = 12 -
    - }
     
    -

    Macro Definition Documentation

    - -
    -
    - -
    -
    - -
    -
    - - - - -
    #define EP_INTERRUPT   0x03
    -
    - -
    -
    - -
    -
    - - - - -
    #define EP_MAXPKTSIZE   32
    -
    - -
    -
    - -
    -
    - - - - -
    #define HID_REQUEST_SET_REPORT   0x09
    -
    - -
    -
    - -
    -
    - - - - -
    #define MADCATZ_VID   0x1BAD
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_CONTROL_PIPE   0
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_INPUT_PIPE   1
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_MAX_ENDPOINTS   3
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_OUTPUT_PIPE   2
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_REPORT_BUFFER_SIZE   14
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_VID   0x045E
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_WIRELESS_PID   0x028F
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_WIRELESS_RECEIVER_PID   0x0719
    -
    - -
    -
    - -
    -
    - - - - -
    #define XBOX_WIRELESS_RECEIVER_THIRD_PARTY_PID   0x0291
    -
    - -
    -
    -

    Enumeration Type Documentation

    - -
    -
    - - - - -
    enum AnalogHat
    -
    - - - - - - - - - -
    Enumerator
    LeftHatX  -
    LeftHatY  -
    RightHatX  -
    RightHatY  -
    LeftHatX  -
    LeftHatY  -
    RightHatX  -
    RightHatY  -
    - -
    -
    - -
    -
    - - - - -
    enum Button
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Enumerator
    UP  -
    RIGHT  -
    DOWN  -
    LEFT  -
    PLUS  -
    TWO  -
    ONE  -
    MINUS  -
    HOME  -
    Z  -
    C  -
    B  -
    A  -
    SELECT  -
    L3  -
    R3  -
    START  -
    L2  -
    R2  -
    L1  -
    R1  -
    TRIANGLE  -
    CIRCLE  -
    CROSS  -
    SQUARE  -
    PS  -
    MOVE  -
    T  -
    BACK  -
    X  -
    Y  -
    XBOX  -
    SYNC  -
    UP  -
    DOWN  -
    LEFT  -
    RIGHT  -
    START  -
    BACK  -
    L3  -
    R3  -
    L1  -
    R1  -
    XBOX  -
    A  -
    B  -
    X  -
    Y  -
    L2  -
    R2  -
    - -
    -
    - -
    -
    - - - - -
    enum LED
    -
    - - - - - - - - - - - - - - - - - -
    Enumerator
    LED1  -
    LED2  -
    LED3  -
    LED4  -
    LED5  -
    LED6  -
    LED7  -
    LED8  -
    LED9  -
    LED10  -
    ALL  -
    ALL  -
    LED1  -
    LED2  -
    LED3  -
    LED4  -
    - -
    -
    - -
    -
    - - - - -
    enum LEDMode
    -
    - - - - - - - - - -
    Enumerator
    ROTATING  -
    FASTBLINK  -
    SLOWBLINK  -
    ALTERNATING  -
    ROTATING  -
    FASTBLINK  -
    SLOWBLINK  -
    ALTERNATING  -
    - -
    -
    -
    - - - - diff --git a/_x_b_o_x_u_s_b_8h__dep__incl.map b/_x_b_o_x_u_s_b_8h__dep__incl.map deleted file mode 100644 index 8e2326fd..00000000 --- a/_x_b_o_x_u_s_b_8h__dep__incl.map +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/_x_b_o_x_u_s_b_8h__dep__incl.md5 b/_x_b_o_x_u_s_b_8h__dep__incl.md5 deleted file mode 100644 index dd3156bd..00000000 --- a/_x_b_o_x_u_s_b_8h__dep__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -1f3801e91b575908dfc70af1118e58f4 \ No newline at end of file diff --git a/_x_b_o_x_u_s_b_8h__dep__incl.png b/_x_b_o_x_u_s_b_8h__dep__incl.png deleted file mode 100644 index 72e3cd1ee33084a2e31000f761b8e44c62cdbbb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5596 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 Zl9XJ_3fFyM2DEFTXY%TDl``gU{sTC$0K)(P diff --git a/_x_b_o_x_u_s_b_8h__incl.map b/_x_b_o_x_u_s_b_8h__incl.map deleted file mode 100644 index 73e3ccba..00000000 --- a/_x_b_o_x_u_s_b_8h__incl.map +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/_x_b_o_x_u_s_b_8h__incl.md5 b/_x_b_o_x_u_s_b_8h__incl.md5 deleted file mode 100644 index 435e7f07..00000000 --- a/_x_b_o_x_u_s_b_8h__incl.md5 +++ /dev/null @@ -1 +0,0 @@ -dec509e8edb62065c7cc3f9b00a1b33f \ No newline at end of file diff --git a/_x_b_o_x_u_s_b_8h__incl.png b/_x_b_o_x_u_s_b_8h__incl.png deleted file mode 100644 index 8518d5b5a5562b4747ecd826f81561ad016eeb81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52815 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 - - - - - -USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/XBOXUSB.h Source File - - - - - - - - - -

    -
    -
    -
    XBOXUSB.h
    -
    -
    -Go to the documentation of this file.
    1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
    -
    2 
    -
    3  This software may be distributed and modified under the terms of the GNU
    -
    4  General Public License version 2 (GPL2) as published by the Free Software
    -
    5  Foundation and appearing in the file GPL2.TXT included in the packaging of
    -
    6  this file. Please note that GPL2 Section 2[b] requires that all works based
    -
    7  on this software must also be made publicly available under the terms of
    -
    8  the GPL2 ("Copyleft").
    -
    9 
    -
    10  Contact information
    -
    11  -------------------
    -
    12 
    -
    13  Kristian Lauszus, TKJ Electronics
    -
    14  Web : http://www.tkjelectronics.com
    -
    15  e-mail : kristianl@tkjelectronics.com
    -
    16  */
    -
    17 
    -
    18 #ifndef _xboxusb_h_
    -
    19 #define _xboxusb_h_
    -
    20 
    -
    21 #if defined(ARDUINO) && ARDUINO >= 100
    -
    22 #include "Arduino.h"
    -
    23 #else
    -
    24 #include "WProgram.h"
    -
    25 #endif
    -
    26 
    -
    27 #include "Usb.h"
    -
    28 
    -
    29 /* Data Xbox 360 taken from descriptors */
    -
    30 #define EP_MAXPKTSIZE 32 // max size for data via USB
    -
    31 
    -
    32 /* Endpoint types */
    -
    33 #define EP_INTERRUPT 0x03
    -
    34 
    -
    35 /* Names we give to the 3 Xbox360 pipes */
    -
    36 #define XBOX_CONTROL_PIPE 0
    -
    37 #define XBOX_INPUT_PIPE 1
    -
    38 #define XBOX_OUTPUT_PIPE 2
    -
    39 
    -
    40 // PID and VID of the different devices
    -
    41 #define XBOX_VID 0x045E // Microsoft Corporation
    -
    42 #define XBOX_WIRELESS_PID 0x028F // Wireless controller only support charging
    -
    43 #define XBOX_WIRELESS_RECEIVER_PID 0x0719 // Microsoft Wireless Gaming Receiver
    -
    44 #define XBOX_WIRELESS_RECEIVER_THIRD_PARTY_PID 0x0291 // Third party Wireless Gaming Receiver
    -
    45 
    -
    46 #define MADCATZ_VID 0x1BAD // For unofficial Mad Catz controllers
    -
    47 
    -
    48 #define XBOX_REPORT_BUFFER_SIZE 14 // Size of the input report buffer
    -
    49 
    -
    50 // Used in control endpoint header for HID Commands
    -
    51 #define bmREQ_HID_OUT USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_INTERFACE
    -
    52 #define HID_REQUEST_SET_REPORT 0x09
    -
    53 
    -
    54 #define XBOX_MAX_ENDPOINTS 3
    -
    55 
    -
    56 enum LED {
    -
    57  ALL = 0x01, // Used to blink all LEDs
    -
    58  LED1 = 0x02,
    -
    59  LED2 = 0x03,
    -
    60  LED3 = 0x04,
    -
    61  LED4 = 0x05,
    -
    62 };
    -
    63 enum LEDMode {
    -
    64  ROTATING = 0x0A,
    -
    65  FASTBLINK = 0x0B,
    -
    66  SLOWBLINK = 0x0C,
    -
    67  ALTERNATING = 0x0D,
    -
    68 };
    -
    69 
    -
    70 enum Button {
    -
    71  // byte location | bit location
    -
    72  UP = (2 << 8) | 0x01,
    -
    73  DOWN = (2 << 8) | 0x02,
    -
    74  LEFT = (2 << 8) | 0x04,
    -
    75  RIGHT = (2 << 8) | 0x08,
    -
    76 
    -
    77  START = (2 << 8) | 0x10,
    -
    78  BACK = (2 << 8) | 0x20,
    -
    79  L3 = (2 << 8) | 0x40,
    -
    80  R3 = (2 << 8) | 0x80,
    -
    81 
    -
    82  L1 = (3 << 8) | 0x01,
    -
    83  R1 = (3 << 8) | 0x02,
    -
    84  XBOX = (3 << 8) | 0x04,
    -
    85 
    -
    86  A = (3 << 8) | 0x10,
    -
    87  B = (3 << 8) | 0x20,
    -
    88  X = (3 << 8) | 0x40,
    -
    89  Y = (3 << 8) | 0x80,
    -
    90 
    -
    91  // These buttons are analog
    -
    92  L2 = 4,
    -
    93  R2 = 5,
    -
    94 };
    -
    95 enum AnalogHat {
    -
    96  LeftHatX = 6,
    -
    97  LeftHatY = 8,
    -
    98  RightHatX = 10,
    -
    99  RightHatY = 12,
    -
    100 };
    -
    101 
    -
    102 class XBOXUSB : public USBDeviceConfig {
    -
    103 public:
    -
    104  XBOXUSB(USB *pUsb);
    -
    105 
    -
    106  // USBDeviceConfig implementation
    -
    107  virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed);
    -
    108  virtual uint8_t Release();
    -
    109  virtual uint8_t Poll();
    -
    110  virtual uint8_t GetAddress() { return bAddress; };
    -
    111  virtual bool isReady() { return bPollEnable; };
    -
    112 
    -
    113  /* XBOX Controller Readings */
    -
    114  uint8_t getButton(Button b);
    -
    115  int16_t getAnalogHat(AnalogHat a);
    -
    116 
    -
    117  /* Commands for Dualshock 3 and Navigation controller */
    -
    118  void setAllOff() { setRumbleOn(0,0); setLedOff(); };
    -
    119  void setRumbleOff() { setRumbleOn(0,0); };
    -
    120  void setRumbleOn(uint8_t lValue, uint8_t rValue);
    -
    121  void setLedOff();
    -
    122  void setLedOn(LED l);
    -
    123  void setLedBlink(LED l);
    -
    124  void setLedMode(LEDMode lm);
    -
    125 
    -
    126  bool Xbox360Connected;// Variable used to indicate if the XBOX 360 controller is successfully connected
    -
    127  bool buttonChanged;//Indicate if a button has been changed
    -
    128  bool buttonPressed;//Indicate if a button has been pressed
    -
    129  bool buttonReleased;//Indicate if a button has been released
    -
    130 
    -
    131 protected:
    -
    132  /* mandatory members */
    - -
    134  uint8_t bAddress; // device address
    -
    135  EpInfo epInfo[XBOX_MAX_ENDPOINTS]; //endpoint info structure
    -
    136 
    -
    137 private:
    -
    138  bool bPollEnable;
    -
    139 
    -
    140  uint32_t ButtonState;
    -
    141  uint32_t OldButtonState;
    -
    142 
    -
    143  uint8_t readBuf[EP_MAXPKTSIZE]; // General purpose buffer for input data
    -
    144  uint8_t writeBuf[EP_MAXPKTSIZE]; // General purpose buffer for output data
    -
    145 
    -
    146  void readReport(); // read incoming data
    -
    147  void printReport(); // print incoming date - Uncomment for debugging
    -
    148 
    -
    149  /* Private commands */
    -
    150  void XboxCommand(uint8_t* data, uint16_t nbytes);
    -
    151 };
    -
    152 #endif
    -
    - - - - diff --git a/acm_2acm__terminal_2pgmstrings_8h.html b/acm_2acm__terminal_2pgmstrings_8h.html index 41e55a28..0a602934 100644 --- a/acm_2acm__terminal_2pgmstrings_8h.html +++ b/acm_2acm__terminal_2pgmstrings_8h.html @@ -119,6 +119,8 @@ Variables
    +

    Definition at line 6 of file pgmstrings.h.

    +
    @@ -135,6 +137,8 @@ Variables
    +

    Definition at line 5 of file pgmstrings.h.

    +
    @@ -151,6 +155,8 @@ Variables
    +

    Definition at line 4 of file pgmstrings.h.

    +

    Variable Documentation

    @@ -164,12 +170,14 @@ Variables
    +

    Definition at line 10 of file pgmstrings.h.

    +
    diff --git a/acm_2acm__terminal_2pgmstrings_8h_source.html b/acm_2acm__terminal_2pgmstrings_8h_source.html index 4471e291..7aef217d 100644 --- a/acm_2acm__terminal_2pgmstrings_8h_source.html +++ b/acm_2acm__terminal_2pgmstrings_8h_source.html @@ -143,7 +143,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/address_8h.html b/address_8h.html index aadd9728..d7b5e3bc 100644 --- a/address_8h.html +++ b/address_8h.html @@ -107,7 +107,7 @@ This graph shows which files directly or indirectly include this file:
    - +

    Go to the source code of this file.

    @@ -162,6 +162,8 @@ Typedefs
    +

    Definition at line 98 of file address.h.

    +
    @@ -174,6 +176,8 @@ Typedefs
    +

    Definition at line 97 of file address.h.

    +
    @@ -186,6 +190,8 @@ Typedefs
    +

    Definition at line 74 of file address.h.

    +
    @@ -198,6 +204,8 @@ Typedefs
    +

    Definition at line 76 of file address.h.

    +
    @@ -210,6 +218,8 @@ Typedefs
    +

    Definition at line 75 of file address.h.

    +
    @@ -222,6 +232,8 @@ Typedefs
    +

    Definition at line 28 of file address.h.

    +
    @@ -234,6 +246,8 @@ Typedefs
    +

    Definition at line 27 of file address.h.

    +
    @@ -246,6 +260,8 @@ Typedefs
    +

    Definition at line 30 of file address.h.

    +
    @@ -258,6 +274,8 @@ Typedefs
    +

    Definition at line 29 of file address.h.

    +

    Typedef Documentation

    @@ -271,12 +289,14 @@ Typedefs
    +

    Definition at line 95 of file address.h.

    +
    diff --git a/address_8h__dep__incl.map b/address_8h__dep__incl.map index 1d5d25de..5caa9e10 100644 --- a/address_8h__dep__incl.map +++ b/address_8h__dep__incl.map @@ -1,44 +1,42 @@ - - - + + + - + - - - - - - - + + + + + + - - - - - - - + + + + + + + - - + + - + - diff --git a/address_8h__dep__incl.md5 b/address_8h__dep__incl.md5 index 28fd677b..d227d350 100644 --- a/address_8h__dep__incl.md5 +++ b/address_8h__dep__incl.md5 @@ -1 +1 @@ -be6cdf32d11b18a00b67a35bc43b9785 \ No newline at end of file +064d9727bc230108749ee8bcca6331f7 \ No newline at end of file diff --git a/address_8h__dep__incl.png b/address_8h__dep__incl.png index cf0e7598cec4d7e20530bcf40b8c4301abc3f40a..5c524a69c2b8bb7079deeaed3deba03f668d765c 100644 GIT binary patch literal 110010 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%0Dvs`yAfub)MuVK0$;+<+X-H?Ue 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 WV*fNR4osk

    diff --git a/adk_8cpp.html b/adk_8cpp.html index 7cbba468..afebddff 100644 --- a/adk_8cpp.html +++ b/adk_8cpp.html @@ -96,10 +96,12 @@ Include dependency graph for adk.cpp: - + +

    Go to the source code of this file.

    + diff --git a/adk_8cpp_source.html b/adk_8cpp_source.html new file mode 100644 index 00000000..3518d71b --- /dev/null +++ b/adk_8cpp_source.html @@ -0,0 +1,454 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/adk.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    USB_Host_Shield_2.0 +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    adk.cpp
    +
    +
    +Go to the documentation of this file.
    1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
    +
    2 
    +
    3 This software may be distributed and modified under the terms of the GNU
    +
    4 General Public License version 2 (GPL2) as published by the Free Software
    +
    5 Foundation and appearing in the file GPL2.TXT included in the packaging of
    +
    6 this file. Please note that GPL2 Section 2[b] requires that all works based
    +
    7 on this software must also be made publicly available under the terms of
    +
    8 the GPL2 ("Copyleft").
    +
    9 
    +
    10 Contact information
    +
    11 -------------------
    +
    12 
    +
    13 Circuits At Home, LTD
    +
    14 Web : http://www.circuitsathome.com
    +
    15 e-mail : support@circuitsathome.com
    +
    16 */
    +
    17 
    +
    18 /* Google ADK interface */
    +
    19 
    +
    20 #include "adk.h"
    +
    21 
    +
    22 const uint8_t ADK::epDataInIndex = 1;
    +
    23 const uint8_t ADK::epDataOutIndex = 2;
    +
    24 
    +
    25 ADK::ADK(USB *p, const char* manufacturer,
    +
    26  const char* model,
    +
    27  const char* description,
    +
    28  const char* version,
    +
    29  const char* uri,
    +
    30  const char* serial) :
    +
    31 
    +
    32  pUsb(p), //pointer to USB class instance - mandatory
    +
    33  bAddress(0), //device address - mandatory
    +
    34  bNumEP(1), //if config descriptor needs to be parsed
    +
    35  ready(false),
    +
    36 
    +
    37  /* ADK ID Strings */
    +
    38 
    +
    39  manufacturer(manufacturer),
    +
    40  model(model),
    +
    41  description(description),
    +
    42  version(version),
    +
    43  uri(uri),
    +
    44  serial(serial)
    +
    45 
    +
    46 {
    +
    47  // initialize endpoint data structures
    +
    48  for(uint8_t i=0; i<ADK_MAX_ENDPOINTS; i++) {
    +
    49  epInfo[i].epAddr = 0;
    +
    50  epInfo[i].maxPktSize = (i) ? 0 : 8;
    +
    51  epInfo[i].epAttribs = 0;
    + +
    53  }//for(uint8_t i=0; i<ADK_MAX_ENDPOINTS; i++...
    +
    54 
    +
    55  // register in USB subsystem
    +
    56  if (pUsb) {
    +
    57  pUsb->RegisterDeviceClass(this); //set devConfig[] entry
    +
    58  }
    +
    59 }
    +
    60 
    +
    61 /* Connection initialization of an Android phone */
    +
    62 uint8_t ADK::Init(uint8_t parent, uint8_t port, bool lowspeed)
    +
    63 {
    +
    64 
    +
    65  uint8_t buf[sizeof(USB_DEVICE_DESCRIPTOR)];
    +
    66  uint8_t rcode;
    +
    67  UsbDevice *p = NULL;
    +
    68  EpInfo *oldep_ptr = NULL;
    +
    69  uint8_t num_of_conf; // number of configurations
    +
    70 
    +
    71  // get memory address of USB device address pool
    +
    72  AddressPool &addrPool = pUsb->GetAddressPool();
    +
    73 
    +
    74  USBTRACE("\r\nADK Init");
    +
    75 
    +
    76  // check if address has already been assigned to an instance
    +
    77  if (bAddress) {
    +
    78  USBTRACE("\r\nAddress in use");
    + +
    80  }
    +
    81 
    +
    82  // Get pointer to pseudo device with address 0 assigned
    +
    83  p = addrPool.GetUsbDevicePtr(0);
    +
    84 
    +
    85  if (!p) {
    +
    86  USBTRACE("\r\nAddress not found");
    + +
    88  }
    +
    89 
    +
    90  if (!p->epinfo) {
    +
    91  USBTRACE("epinfo is null\r\n");
    + +
    93  }
    +
    94 
    +
    95  // Save old pointer to EP_RECORD of address 0
    +
    96  oldep_ptr = p->epinfo;
    +
    97 
    +
    98  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
    +
    99  p->epinfo = epInfo;
    +
    100 
    +
    101  p->lowspeed = lowspeed;
    +
    102 
    +
    103  // Get device descriptor
    +
    104  rcode = pUsb->getDevDescr( 0, 0, sizeof(USB_DEVICE_DESCRIPTOR), (uint8_t*)buf );
    +
    105 
    +
    106  // Restore p->epinfo
    +
    107  p->epinfo = oldep_ptr;
    +
    108 
    +
    109  if( rcode ){
    +
    110  goto FailGetDevDescr;
    +
    111  }
    +
    112 
    +
    113  // Allocate new address according to device class
    +
    114  bAddress = addrPool.AllocAddress(parent, false, port);
    +
    115 
    +
    116  // Extract Max Packet Size from device descriptor
    +
    117  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
    +
    118 
    +
    119  // Assign new address to the device
    +
    120  rcode = pUsb->setAddr( 0, 0, bAddress );
    +
    121  if (rcode) {
    +
    122  p->lowspeed = false;
    +
    123  addrPool.FreeAddress(bAddress);
    +
    124  bAddress = 0;
    +
    125  //USBTRACE2("setAddr:",rcode);
    +
    126  return rcode;
    +
    127  }//if (rcode...
    +
    128 
    +
    129  //USBTRACE2("\r\nAddr:", bAddress);
    +
    130 
    +
    131  p->lowspeed = false;
    +
    132 
    +
    133  //get pointer to assigned address record
    +
    134  p = addrPool.GetUsbDevicePtr(bAddress);
    +
    135  if (!p) {
    + +
    137  }
    +
    138 
    +
    139  p->lowspeed = lowspeed;
    +
    140 
    +
    141  // Assign epInfo to epinfo pointer - only EP0 is known
    +
    142  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
    +
    143  if (rcode) {
    +
    144  goto FailSetDevTblEntry;
    +
    145  }
    +
    146 
    +
    147  //check if ADK device is already in accessory mode; if yes, configure and exit
    +
    148  if(((USB_DEVICE_DESCRIPTOR*)buf)->idVendor == ADK_VID &&
    +
    149  (((USB_DEVICE_DESCRIPTOR*)buf)->idProduct == ADK_PID || ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct == ADB_PID)) {
    +
    150  USBTRACE("\r\nAcc.mode device detected");
    +
    151  /* go through configurations, find first bulk-IN, bulk-OUT EP, fill epInfo and quit */
    +
    152  num_of_conf = ((USB_DEVICE_DESCRIPTOR*)buf)->bNumConfigurations;
    +
    153 
    +
    154  //USBTRACE2("\r\nNC:",num_of_conf);
    +
    155 
    +
    156  for (uint8_t i=0; i<num_of_conf; i++) {
    +
    157  ConfigDescParser<0, 0, 0, 0> confDescrParser(this);
    +
    158  delay(1);
    +
    159  rcode = pUsb->getConfDescr(bAddress, 0, i, &confDescrParser);
    +
    160 #if defined(XOOM)
    +
    161  //added by Jaylen Scott Vanorden
    +
    162  if( rcode ) {
    +
    163  USBTRACE2("\r\nGot 1st bad code for config: ", rcode);
    +
    164  // Try once more
    +
    165  rcode = pUsb->getConfDescr(bAddress, 0, i, &confDescrParser);
    +
    166  }
    +
    167 #endif
    +
    168  if( rcode ) {
    +
    169  goto FailGetConfDescr;
    +
    170  }
    +
    171  if( bNumEP > 2 ) {
    +
    172  break;
    +
    173  }
    +
    174  } // for (uint8_t i=0; i<num_of_conf; i++...
    +
    175 
    +
    176  if( bNumEP == 3 ) {
    +
    177  // Assign epInfo to epinfo pointer - this time all 3 endpoins
    +
    178  rcode = pUsb->setEpInfoEntry(bAddress, 3, epInfo);
    +
    179  if (rcode) {
    +
    180  goto FailSetDevTblEntry;
    +
    181  }
    +
    182  }
    +
    183 
    +
    184 
    +
    185 
    +
    186  // Set Configuration Value
    +
    187  rcode = pUsb->setConf(bAddress, 0, bConfNum);
    +
    188  if( rcode ){
    +
    189  goto FailSetConf;
    +
    190  }
    +
    191  /* print endpoint structure */
    +
    192 // USBTRACE("\r\nEndpoint Structure:");
    +
    193 // USBTRACE("\r\nEP0:");
    +
    194 // USBTRACE2("\r\nAddr: ", epInfo[0].epAddr );
    +
    195 // USBTRACE2("\r\nMax.pkt.size: ", epInfo[0].maxPktSize );
    +
    196 // USBTRACE2("\r\nAttr: ", epInfo[0].epAttribs );
    +
    197 // USBTRACE("\r\nEpout:");
    +
    198 // USBTRACE2("\r\nAddr: ", epInfo[epDataOutIndex].epAddr );
    +
    199 // USBTRACE2("\r\nMax.pkt.size: ", epInfo[epDataOutIndex].maxPktSize );
    +
    200 // USBTRACE2("\r\nAttr: ", epInfo[epDataOutIndex].epAttribs );
    +
    201 // USBTRACE("\r\nEpin:");
    +
    202 // USBTRACE2("\r\nAddr: ", epInfo[epDataInIndex].epAddr );
    +
    203 // USBTRACE2("\r\nMax.pkt.size: ", epInfo[epDataInIndex].maxPktSize );
    +
    204 // USBTRACE2("\r\nAttr: ", epInfo[epDataInIndex].epAttribs );
    +
    205 
    +
    206  USBTRACE("\r\nConfiguration successful");
    +
    207  ready = true;
    +
    208  return 0; //successful configuration
    +
    209  }//if( buf->idVendor == ADK_VID...
    +
    210 
    +
    211  //probe device - get accessory protocol revision
    +
    212  {
    +
    213  uint16_t adkproto = -1;
    +
    214  delay(1);
    +
    215  rcode = getProto((uint8_t*)&adkproto );
    +
    216 #if defined(XOOM)
    +
    217  //added by Jaylen Scott Vanorden
    +
    218  if( rcode ) {
    +
    219  USBTRACE2("\r\nGot 1st bad code for proto: ", rcode);
    +
    220  // Try once more
    +
    221  rcode = getProto((uint8_t*)&adkproto );
    +
    222  }
    +
    223 #endif
    +
    224  if( rcode ){
    +
    225  goto FailGetProto; //init fails
    +
    226  }
    +
    227  USBTRACE2("\r\nADK protocol rev. ", adkproto );
    +
    228  }
    +
    229 
    +
    230  //sending ID strings
    +
    231  sendStr( ACCESSORY_STRING_MANUFACTURER, manufacturer);
    +
    232  sendStr( ACCESSORY_STRING_MODEL, model);
    +
    233  sendStr( ACCESSORY_STRING_DESCRIPTION, description);
    +
    234  sendStr( ACCESSORY_STRING_VERSION, version);
    +
    235  sendStr( ACCESSORY_STRING_URI, uri);
    +
    236  sendStr( ACCESSORY_STRING_SERIAL, serial);
    +
    237 
    +
    238  //switch to accessory mode
    +
    239  //the Android phone will reset
    +
    240  rcode = switchAcc();
    +
    241  if( rcode ) {
    +
    242  goto FailSwAcc; //init fails
    +
    243  }
    +
    244  rcode = -1;
    +
    245  goto SwAttempt; //switch to accessory mode attempted
    +
    246 
    +
    247  /* diagnostic messages */
    +
    248 FailGetDevDescr:
    +
    249  USBTRACE("\r\ngetDevDescr:");
    +
    250  goto Fail;
    +
    251 
    +
    252 FailSetDevTblEntry:
    +
    253  USBTRACE("\r\nsetDevTblEn:");
    +
    254  goto Fail;
    +
    255 
    +
    256 FailGetProto:
    +
    257  USBTRACE("\r\ngetProto:");
    +
    258  goto Fail;
    +
    259 
    +
    260 FailSwAcc:
    +
    261  USBTRACE("\r\nswAcc:");
    +
    262  goto Fail;
    +
    263 
    +
    264 SwAttempt:
    +
    265  USBTRACE("\r\nAccessory mode switch attempt");
    +
    266  goto Fail;
    +
    267 
    +
    268 FailGetConfDescr:
    +
    269 // USBTRACE("getConf:");
    +
    270  goto Fail;
    +
    271 //
    +
    272 FailSetConf:
    +
    273 // USBTRACE("setConf:");
    +
    274  goto Fail;
    +
    275 //
    +
    276 //FailOnInit:
    +
    277 // USBTRACE("OnInit:");
    +
    278 // goto Fail;
    +
    279 //
    +
    280 Fail:
    +
    281  //USBTRACE2("\r\nADK Init Failed, error code: ", rcode);
    +
    282  Release();
    +
    283  return rcode;
    +
    284 }
    +
    285 
    +
    286 /* Extracts bulk-IN and bulk-OUT endpoint information from config descriptor */
    +
    287 void ADK::EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *pep)
    +
    288 {
    +
    289  //ErrorMessage<uint8_t>(PSTR("Conf.Val"), conf);
    +
    290  //ErrorMessage<uint8_t>(PSTR("Iface Num"),iface);
    +
    291  //ErrorMessage<uint8_t>(PSTR("Alt.Set"), alt);
    +
    292 
    +
    293  //added by Yuuichi Akagawa
    +
    294  if( bNumEP == 3 ) {
    +
    295  return;
    +
    296  }
    +
    297 
    +
    298  bConfNum = conf;
    +
    299 
    +
    300  uint8_t index;
    +
    301 
    +
    302  if ((pep->bmAttributes & 0x02) == 2) {
    +
    303  index = ((pep->bEndpointAddress & 0x80) == 0x80) ? epDataInIndex : epDataOutIndex;
    +
    304  }
    +
    305 
    +
    306  // Fill in the endpoint info structure
    +
    307  epInfo[index].epAddr = (pep->bEndpointAddress & 0x0F);
    +
    308  epInfo[index].maxPktSize = (uint8_t)pep->wMaxPacketSize;
    +
    309 
    +
    310  bNumEP ++;
    +
    311 
    +
    312  //PrintEndpointDescriptor(pep);
    +
    313 }
    +
    314 
    +
    315 /* Performs a cleanup after failed Init() attempt */
    +
    316 uint8_t ADK::Release()
    +
    317 {
    + +
    319 
    +
    320  bNumEP = 1; //must have to be reset to 1
    +
    321 
    +
    322  bAddress = 0;
    +
    323  ready = false;
    +
    324  return 0;
    +
    325 }
    +
    326 
    +
    327 uint8_t ADK::RcvData(uint16_t *bytes_rcvd, uint8_t *dataptr)
    +
    328 {
    +
    329  //USBTRACE2("\r\nAddr: ", bAddress );
    +
    330  //USBTRACE2("\r\nEP: ",epInfo[epDataInIndex].epAddr);
    +
    331  return pUsb->inTransfer(bAddress, epInfo[epDataInIndex].epAddr, bytes_rcvd, dataptr);
    +
    332 }
    +
    333 
    +
    334 uint8_t ADK::SndData(uint16_t nbytes, uint8_t *dataptr)
    +
    335 {
    +
    336  return pUsb->outTransfer(bAddress, epInfo[epDataOutIndex].epAddr, nbytes, dataptr);
    +
    337 }
    +
    338 
    + +
    340 {
    +
    341  Notify(PSTR("Endpoint descriptor:"));
    +
    342  Notify(PSTR("\r\nLength:\t\t"));
    +
    343  PrintHex<uint8_t>(ep_ptr->bLength);
    +
    344  Notify(PSTR("\r\nType:\t\t"));
    +
    345  PrintHex<uint8_t>(ep_ptr->bDescriptorType);
    +
    346  Notify(PSTR("\r\nAddress:\t"));
    +
    347  PrintHex<uint8_t>(ep_ptr->bEndpointAddress);
    +
    348  Notify(PSTR("\r\nAttributes:\t"));
    +
    349  PrintHex<uint8_t>(ep_ptr->bmAttributes);
    +
    350  Notify(PSTR("\r\nMaxPktSize:\t"));
    +
    351  PrintHex<uint16_t>(ep_ptr->wMaxPacketSize);
    +
    352  Notify(PSTR("\r\nPoll Intrv:\t"));
    +
    353  PrintHex<uint8_t>(ep_ptr->bInterval);
    +
    354  Notify(PSTR("\r\n"));
    +
    355 }
    +
    + + + + diff --git a/adk_8h.html b/adk_8h.html index 3acb509c..18ac3503 100644 --- a/adk_8h.html +++ b/adk_8h.html @@ -171,6 +171,8 @@ Macros
    +

    Definition at line 62 of file adk.h.

    +
    @@ -183,6 +185,8 @@ Macros
    +

    Definition at line 60 of file adk.h.

    +
    @@ -195,6 +199,8 @@ Macros
    +

    Definition at line 61 of file adk.h.

    +
    @@ -207,6 +213,8 @@ Macros
    +

    Definition at line 65 of file adk.h.

    +
    @@ -219,6 +227,8 @@ Macros
    +

    Definition at line 64 of file adk.h.

    +
    @@ -231,6 +241,8 @@ Macros
    +

    Definition at line 63 of file adk.h.

    +
    @@ -243,6 +255,8 @@ Macros
    +

    Definition at line 45 of file adk.h.

    +
    @@ -255,6 +269,8 @@ Macros
    +

    Definition at line 55 of file adk.h.

    +
    @@ -267,6 +283,8 @@ Macros
    +

    Definition at line 53 of file adk.h.

    +
    @@ -279,6 +297,8 @@ Macros
    +

    Definition at line 67 of file adk.h.

    +
    @@ -291,6 +311,8 @@ Macros
    +

    Definition at line 44 of file adk.h.

    +
    @@ -303,6 +325,8 @@ Macros
    +

    Definition at line 54 of file adk.h.

    +
    @@ -315,6 +339,8 @@ Macros
    +

    Definition at line 43 of file adk.h.

    +
    @@ -327,6 +353,8 @@ Macros
    +

    Definition at line 57 of file adk.h.

    +
    @@ -339,6 +367,8 @@ Macros
    +

    Definition at line 58 of file adk.h.

    +
    @@ -351,12 +381,14 @@ Macros
    +

    Definition at line 47 of file adk.h.

    +
    diff --git a/adk_8h_source.html b/adk_8h_source.html index e13a9225..86cf4586 100644 --- a/adk_8h_source.html +++ b/adk_8h_source.html @@ -236,7 +236,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/annotated.html b/annotated.html index a30e209b..203c7bbe 100644 --- a/annotated.html +++ b/annotated.html @@ -161,14 +161,13 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); oCUSBHub oCUSBReadParser oCWII -oCXBOXRECV -\CXBOXUSB +\CXBOXRECV diff --git a/avrpins_8h.html b/avrpins_8h.html index 26d86806..83065fda 100644 --- a/avrpins_8h.html +++ b/avrpins_8h.html @@ -104,7 +104,7 @@ This graph shows which files directly or indirectly include this file:
    - +

    Go to the source code of this file.

    @@ -187,6 +187,8 @@ Macros
    enum{Width=sizeof(DataT)*8};\
    };
    +

    Definition at line 88 of file avrpins.h.

    + @@ -225,12 +227,14 @@ Macros
    enum{Width=sizeof(DataT)*8};\
    };
    +

    Definition at line 110 of file avrpins.h.

    + diff --git a/avrpins_8h__dep__incl.map b/avrpins_8h__dep__incl.map index eaf12a69..9cfcfe6f 100644 --- a/avrpins_8h__dep__incl.map +++ b/avrpins_8h__dep__incl.map @@ -1,45 +1,43 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/avrpins_8h__dep__incl.md5 b/avrpins_8h__dep__incl.md5 index b1aec268..787b7eba 100644 --- a/avrpins_8h__dep__incl.md5 +++ b/avrpins_8h__dep__incl.md5 @@ -1 +1 @@ -ec46f74a03913c59d6802a20aa198a7a \ No newline at end of file +252a859ba6e6a088b5d76a3585b78527 \ No newline at end of file diff --git a/avrpins_8h__dep__incl.png b/avrpins_8h__dep__incl.png index 01173691ac64db3e36fee30f2eb9d316bd4fad21..8901aa3424a43e1c18b61b665afc89c0a49233ae 100644 GIT binary patch literal 233046 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 DQiLks literal 241456 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

    GXWS4IPRq0XGb4BqIX>GMt;i&ef$K9Lrwf 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

    A8#WcQp@s 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 Z@?WH%cq?vn5+S~^s?s6y69x0j{|6(rDJK8` diff --git a/avrpins_8h_source.html b/avrpins_8h_source.html index ae4c5e2c..87a53857 100644 --- a/avrpins_8h_source.html +++ b/avrpins_8h_source.html @@ -118,646 +118,687 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    29 //#define BOARD_TEENSY
    30 
    -
    31 #include <avr/io.h>
    -
    32 
    -
    33 #ifdef PORTA
    -
    34 #define USE_PORTA
    -
    35 #endif
    -
    36 #ifdef PORTB
    -
    37 #define USE_PORTB
    +
    31 /* Uncomment the following if you are using a Sanguino */
    +
    32 //#define BOARD_SANGUINO
    +
    33 
    +
    34 #include <avr/io.h>
    +
    35 
    +
    36 #ifdef PORTA
    +
    37 #define USE_PORTA
    38 #endif
    -
    39 #ifdef PORTC
    -
    40 #define USE_PORTC
    +
    39 #ifdef PORTB
    +
    40 #define USE_PORTB
    41 #endif
    -
    42 #ifdef PORTD
    -
    43 #define USE_PORTD
    +
    42 #ifdef PORTC
    +
    43 #define USE_PORTC
    44 #endif
    -
    45 #ifdef PORTE
    -
    46 #define USE_PORTE
    +
    45 #ifdef PORTD
    +
    46 #define USE_PORTD
    47 #endif
    -
    48 #ifdef PORTF
    -
    49 #define USE_PORTF
    +
    48 #ifdef PORTE
    +
    49 #define USE_PORTE
    50 #endif
    -
    51 #ifdef PORTG
    -
    52 #define USE_PORTG
    +
    51 #ifdef PORTF
    +
    52 #define USE_PORTF
    53 #endif
    -
    54 #ifdef PORTH
    -
    55 #define USE_PORTH
    +
    54 #ifdef PORTG
    +
    55 #define USE_PORTG
    56 #endif
    -
    57 #ifdef PORTJ
    -
    58 #define USE_PORTJ
    +
    57 #ifdef PORTH
    +
    58 #define USE_PORTH
    59 #endif
    -
    60 #ifdef PORTK
    -
    61 #define USE_PORTK
    +
    60 #ifdef PORTJ
    +
    61 #define USE_PORTJ
    62 #endif
    -
    63 #ifdef PORTL
    -
    64 #define USE_PORTL
    +
    63 #ifdef PORTK
    +
    64 #define USE_PORTK
    65 #endif
    -
    66 #ifdef PORTQ
    -
    67 #define USE_PORTQ
    +
    66 #ifdef PORTL
    +
    67 #define USE_PORTL
    68 #endif
    -
    69 #ifdef PORTR
    -
    70 #define USE_PORTR
    +
    69 #ifdef PORTQ
    +
    70 #define USE_PORTQ
    71 #endif
    -
    72 
    -
    73 #ifdef TCCR0A
    -
    74 #define USE_TCCR0A
    -
    75 #endif
    -
    76 #ifdef TCCR1A
    -
    77 #define USE_TCCR1A
    +
    72 #ifdef PORTR
    +
    73 #define USE_PORTR
    +
    74 #endif
    +
    75 
    +
    76 #ifdef TCCR0A
    +
    77 #define USE_TCCR0A
    78 #endif
    -
    79 #ifdef TCCR2A
    -
    80 #define USE_TCCR2A
    +
    79 #ifdef TCCR1A
    +
    80 #define USE_TCCR1A
    81 #endif
    -
    82 
    -
    83 //Port definitions for AtTiny, AtMega families.
    -
    84 
    -
    85 #define MAKE_PORT(portName, ddrName, pinName, className, ID) \
    -
    86  class className{\
    -
    87  public:\
    -
    88  typedef uint8_t DataT;\
    -
    89  public:\
    -
    90  static void Write(DataT value){portName = value;}\
    -
    91  static void ClearAndSet(DataT clearMask, DataT value){portName = (portName & ~clearMask) | value;}\
    -
    92  static DataT Read(){return portName;}\
    -
    93  static void DirWrite(DataT value){ddrName = value;}\
    -
    94  static DataT DirRead(){return ddrName;}\
    -
    95  static void Set(DataT value){portName |= value;}\
    -
    96  static void Clear(DataT value){portName &= ~value;}\
    -
    97  static void Toggle(DataT value){portName ^= value;}\
    -
    98  static void DirSet(DataT value){ddrName |= value;}\
    -
    99  static void DirClear(DataT value){ddrName &= ~value;}\
    -
    100  static void DirToggle(DataT value){ddrName ^= value;}\
    -
    101  static DataT PinRead(){return pinName;}\
    -
    102  enum{Id = ID};\
    -
    103  enum{Width=sizeof(DataT)*8};\
    -
    104  };
    -
    105 
    -
    106 // TCCR registers to set/clear Arduino PWM
    -
    107 #define MAKE_TCCR(TccrName, className) \
    -
    108  class className{\
    -
    109  public:\
    -
    110  typedef uint8_t DataT;\
    -
    111  public:\
    -
    112  static void Write(DataT value){TccrName = value;}\
    -
    113  static void ClearAndSet(DataT clearMask, DataT value){TccrName = (TccrName & ~clearMask) | value;}\
    -
    114  static DataT Read(){return TccrName;}\
    -
    115  static void Set(DataT value){TccrName |= value;}\
    -
    116  static void Clear(DataT value){TccrName &= ~value;}\
    -
    117  static void Toggle(DataT value){TccrName ^= value;}\
    -
    118  enum{Width=sizeof(DataT)*8};\
    -
    119  };
    -
    120 
    -
    121 #ifdef USE_PORTA
    -
    122 MAKE_PORT(PORTA, DDRA, PINA, Porta, 'A')
    -
    123 #endif
    -
    124 #ifdef USE_PORTB
    -
    125 MAKE_PORT(PORTB, DDRB, PINB, Portb, 'B')
    +
    82 #ifdef TCCR2A
    +
    83 #define USE_TCCR2A
    +
    84 #endif
    +
    85 
    +
    86 //Port definitions for AtTiny, AtMega families.
    +
    87 
    +
    88 #define MAKE_PORT(portName, ddrName, pinName, className, ID) \
    +
    89  class className{\
    +
    90  public:\
    +
    91  typedef uint8_t DataT;\
    +
    92  public:\
    +
    93  static void Write(DataT value){portName = value;}\
    +
    94  static void ClearAndSet(DataT clearMask, DataT value){portName = (portName & ~clearMask) | value;}\
    +
    95  static DataT Read(){return portName;}\
    +
    96  static void DirWrite(DataT value){ddrName = value;}\
    +
    97  static DataT DirRead(){return ddrName;}\
    +
    98  static void Set(DataT value){portName |= value;}\
    +
    99  static void Clear(DataT value){portName &= ~value;}\
    +
    100  static void Toggle(DataT value){portName ^= value;}\
    +
    101  static void DirSet(DataT value){ddrName |= value;}\
    +
    102  static void DirClear(DataT value){ddrName &= ~value;}\
    +
    103  static void DirToggle(DataT value){ddrName ^= value;}\
    +
    104  static DataT PinRead(){return pinName;}\
    +
    105  enum{Id = ID};\
    +
    106  enum{Width=sizeof(DataT)*8};\
    +
    107  };
    +
    108 
    +
    109 // TCCR registers to set/clear Arduino PWM
    +
    110 #define MAKE_TCCR(TccrName, className) \
    +
    111  class className{\
    +
    112  public:\
    +
    113  typedef uint8_t DataT;\
    +
    114  public:\
    +
    115  static void Write(DataT value){TccrName = value;}\
    +
    116  static void ClearAndSet(DataT clearMask, DataT value){TccrName = (TccrName & ~clearMask) | value;}\
    +
    117  static DataT Read(){return TccrName;}\
    +
    118  static void Set(DataT value){TccrName |= value;}\
    +
    119  static void Clear(DataT value){TccrName &= ~value;}\
    +
    120  static void Toggle(DataT value){TccrName ^= value;}\
    +
    121  enum{Width=sizeof(DataT)*8};\
    +
    122  };
    +
    123 
    +
    124 #ifdef USE_PORTA
    +
    125 MAKE_PORT(PORTA, DDRA, PINA, Porta, 'A')
    126 #endif
    -
    127 #ifdef USE_PORTC
    -
    128 MAKE_PORT(PORTC, DDRC, PINC, Portc, 'C')
    +
    127 #ifdef USE_PORTB
    +
    128 MAKE_PORT(PORTB, DDRB, PINB, Portb, 'B')
    129 #endif
    -
    130 #ifdef USE_PORTD
    -
    131 MAKE_PORT(PORTD, DDRD, PIND, Portd, 'D')
    +
    130 #ifdef USE_PORTC
    +
    131 MAKE_PORT(PORTC, DDRC, PINC, Portc, 'C')
    132 #endif
    -
    133 #ifdef USE_PORTE
    -
    134 MAKE_PORT(PORTE, DDRE, PINE, Porte, 'E')
    +
    133 #ifdef USE_PORTD
    +
    134 MAKE_PORT(PORTD, DDRD, PIND, Portd, 'D')
    135 #endif
    -
    136 #ifdef USE_PORTF
    -
    137 MAKE_PORT(PORTF, DDRF, PINF, Portf, 'F')
    +
    136 #ifdef USE_PORTE
    +
    137 MAKE_PORT(PORTE, DDRE, PINE, Porte, 'E')
    138 #endif
    -
    139 #ifdef USE_PORTG
    -
    140 MAKE_PORT(PORTG, DDRG, PING, Portg, 'G')
    +
    139 #ifdef USE_PORTF
    +
    140 MAKE_PORT(PORTF, DDRF, PINF, Portf, 'F')
    141 #endif
    -
    142 #ifdef USE_PORTH
    -
    143 MAKE_PORT(PORTH, DDRH, PINH, Porth, 'H')
    +
    142 #ifdef USE_PORTG
    +
    143 MAKE_PORT(PORTG, DDRG, PING, Portg, 'G')
    144 #endif
    -
    145 #ifdef USE_PORTJ
    -
    146 MAKE_PORT(PORTJ, DDRJ, PINJ, Portj, 'J')
    +
    145 #ifdef USE_PORTH
    +
    146 MAKE_PORT(PORTH, DDRH, PINH, Porth, 'H')
    147 #endif
    -
    148 #ifdef USE_PORTK
    -
    149 MAKE_PORT(PORTK, DDRK, PINK, Portk, 'K')
    +
    148 #ifdef USE_PORTJ
    +
    149 MAKE_PORT(PORTJ, DDRJ, PINJ, Portj, 'J')
    150 #endif
    -
    151 #ifdef USE_PORTL
    -
    152 MAKE_PORT(PORTL, DDRL, PINL, Portl, 'L')
    +
    151 #ifdef USE_PORTK
    +
    152 MAKE_PORT(PORTK, DDRK, PINK, Portk, 'K')
    153 #endif
    -
    154 #ifdef USE_PORTQ
    -
    155 MAKE_PORT(PORTQ, DDRQ, PINQ, Portq, 'Q')
    +
    154 #ifdef USE_PORTL
    +
    155 MAKE_PORT(PORTL, DDRL, PINL, Portl, 'L')
    156 #endif
    -
    157 #ifdef USE_PORTR
    -
    158 MAKE_PORT(PORTR, DDRR, PINR, Portr, 'R')
    +
    157 #ifdef USE_PORTQ
    +
    158 MAKE_PORT(PORTQ, DDRQ, PINQ, Portq, 'Q')
    159 #endif
    -
    160 
    -
    161 #ifdef USE_TCCR0A
    -
    162 MAKE_TCCR(TCCR0A, Tccr0a)
    -
    163 #endif
    -
    164 #ifdef USE_TCCR1A
    -
    165 MAKE_TCCR(TCCR1A, Tccr1a)
    +
    160 #ifdef USE_PORTR
    +
    161 MAKE_PORT(PORTR, DDRR, PINR, Portr, 'R')
    +
    162 #endif
    +
    163 
    +
    164 #ifdef USE_TCCR0A
    +
    165 MAKE_TCCR(TCCR0A, Tccr0a)
    166 #endif
    -
    167 #ifdef USE_TCCR2A
    -
    168 MAKE_TCCR(TCCR2A, Tccr2a)
    +
    167 #ifdef USE_TCCR1A
    +
    168 MAKE_TCCR(TCCR1A, Tccr1a)
    169 #endif
    -
    170 
    -
    171  // this class represents one pin in a IO port.
    -
    172  // It is fully static.
    -
    173  template<typename PORT, uint8_t PIN>
    -
    174  class TPin
    -
    175  {
    -
    176 // BOOST_STATIC_ASSERT(PIN < PORT::Width);
    -
    177  public:
    -
    178  typedef PORT Port;
    -
    179  enum{Number = PIN};
    -
    180 
    -
    181  static void Set() { PORT::Set(1 << PIN); }
    -
    182 
    -
    183  static void Set(uint8_t val){
    -
    184  if(val)
    -
    185  Set();
    -
    186  else Clear();}
    -
    187 
    -
    188  static void SetDir(uint8_t val){
    -
    189  if(val)
    -
    190  SetDirWrite();
    -
    191  else SetDirRead();}
    -
    192 
    -
    193  static void Clear(){PORT::Clear(1 << PIN);}
    -
    194 
    -
    195  static void Toggle(){PORT::Toggle(1 << PIN);}
    -
    196 
    -
    197  static void SetDirRead(){PORT::DirClear(1 << PIN);}
    -
    198 
    -
    199  static void SetDirWrite(){PORT::DirSet(1 << PIN);}
    -
    200 
    -
    201  static uint8_t IsSet(){return PORT::PinRead() & (uint8_t)(1 << PIN);}
    -
    202 
    -
    203  static void WaiteForSet(){ while(IsSet()==0){} }
    -
    204 
    -
    205  static void WaiteForClear(){ while(IsSet()){} }
    -
    206  }; //class TPin...
    +
    170 #ifdef USE_TCCR2A
    +
    171 MAKE_TCCR(TCCR2A, Tccr2a)
    +
    172 #endif
    +
    173 
    +
    174  // this class represents one pin in a IO port.
    +
    175  // It is fully static.
    +
    176  template<typename PORT, uint8_t PIN>
    +
    177  class TPin
    +
    178  {
    +
    179 // BOOST_STATIC_ASSERT(PIN < PORT::Width);
    +
    180  public:
    +
    181  typedef PORT Port;
    +
    182  enum{Number = PIN};
    +
    183 
    +
    184  static void Set() { PORT::Set(1 << PIN); }
    +
    185 
    +
    186  static void Set(uint8_t val){
    +
    187  if(val)
    +
    188  Set();
    +
    189  else Clear();}
    +
    190 
    +
    191  static void SetDir(uint8_t val){
    +
    192  if(val)
    +
    193  SetDirWrite();
    +
    194  else SetDirRead();}
    +
    195 
    +
    196  static void Clear(){PORT::Clear(1 << PIN);}
    +
    197 
    +
    198  static void Toggle(){PORT::Toggle(1 << PIN);}
    +
    199 
    +
    200  static void SetDirRead(){PORT::DirClear(1 << PIN);}
    +
    201 
    +
    202  static void SetDirWrite(){PORT::DirSet(1 << PIN);}
    +
    203 
    +
    204  static uint8_t IsSet(){return PORT::PinRead() & (uint8_t)(1 << PIN);}
    +
    205 
    +
    206  static void WaiteForSet(){ while(IsSet()==0){} }
    207 
    -
    208  // this class represents one bit in TCCR port.
    -
    209  // used to set/clear TCCRx bits
    -
    210  // It is fully static.
    -
    211  template<typename TCCR, uint8_t COM>
    -
    212  class TCom
    -
    213  {
    -
    214 // BOOST_STATIC_ASSERT(PIN < PORT::Width);
    -
    215  public:
    -
    216  typedef TCCR Tccr;
    -
    217  enum{Com = COM};
    -
    218 
    -
    219  static void Set() { TCCR::Set(1 << COM); }
    -
    220 
    -
    221  static void Clear() { TCCR::Clear(1 << COM); }
    -
    222 
    -
    223  static void Toggle() { TCCR::Toggle(1 << COM); }
    -
    224  }; //class TCom...
    +
    208  static void WaiteForClear(){ while(IsSet()){} }
    +
    209  }; //class TPin...
    +
    210 
    +
    211  // this class represents one bit in TCCR port.
    +
    212  // used to set/clear TCCRx bits
    +
    213  // It is fully static.
    +
    214  template<typename TCCR, uint8_t COM>
    +
    215  class TCom
    +
    216  {
    +
    217 // BOOST_STATIC_ASSERT(PIN < PORT::Width);
    +
    218  public:
    +
    219  typedef TCCR Tccr;
    +
    220  enum{Com = COM};
    +
    221 
    +
    222  static void Set() { TCCR::Set(1 << COM); }
    +
    223 
    +
    224  static void Clear() { TCCR::Clear(1 << COM); }
    225 
    -
    226 //Short pin definitions
    -
    227 #ifdef USE_PORTA
    -
    228 typedef TPin<Porta, 0> Pa0;
    -
    229 typedef TPin<Porta, 1> Pa1;
    -
    230 typedef TPin<Porta, 2> Pa2;
    -
    231 typedef TPin<Porta, 3> Pa3;
    -
    232 typedef TPin<Porta, 4> Pa4;
    -
    233 typedef TPin<Porta, 5> Pa5;
    -
    234 typedef TPin<Porta, 6> Pa6;
    -
    235 typedef TPin<Porta, 7> Pa7;
    -
    236 #endif
    -
    237 
    -
    238 #ifdef USE_PORTB
    -
    239 typedef TPin<Portb, 0> Pb0;
    -
    240 typedef TPin<Portb, 1> Pb1;
    -
    241 typedef TPin<Portb, 2> Pb2;
    -
    242 typedef TPin<Portb, 3> Pb3;
    -
    243 typedef TPin<Portb, 4> Pb4;
    -
    244 typedef TPin<Portb, 5> Pb5;
    -
    245 typedef TPin<Portb, 6> Pb6;
    -
    246 typedef TPin<Portb, 7> Pb7;
    -
    247 #endif
    -
    248 
    -
    249 #ifdef USE_PORTC
    -
    250 typedef TPin<Portc, 0> Pc0;
    -
    251 typedef TPin<Portc, 1> Pc1;
    -
    252 typedef TPin<Portc, 2> Pc2;
    -
    253 typedef TPin<Portc, 3> Pc3;
    -
    254 typedef TPin<Portc, 4> Pc4;
    -
    255 typedef TPin<Portc, 5> Pc5;
    -
    256 typedef TPin<Portc, 6> Pc6;
    -
    257 typedef TPin<Portc, 7> Pc7;
    -
    258 #endif
    -
    259 
    -
    260 #ifdef USE_PORTD
    -
    261 typedef TPin<Portd, 0> Pd0;
    -
    262 typedef TPin<Portd, 1> Pd1;
    -
    263 typedef TPin<Portd, 2> Pd2;
    -
    264 typedef TPin<Portd, 3> Pd3;
    -
    265 typedef TPin<Portd, 4> Pd4;
    -
    266 typedef TPin<Portd, 5> Pd5;
    -
    267 typedef TPin<Portd, 6> Pd6;
    -
    268 typedef TPin<Portd, 7> Pd7;
    -
    269 #endif
    -
    270 
    -
    271 #ifdef USE_PORTE
    -
    272 typedef TPin<Porte, 0> Pe0;
    -
    273 typedef TPin<Porte, 1> Pe1;
    -
    274 typedef TPin<Porte, 2> Pe2;
    -
    275 typedef TPin<Porte, 3> Pe3;
    -
    276 typedef TPin<Porte, 4> Pe4;
    -
    277 typedef TPin<Porte, 5> Pe5;
    -
    278 typedef TPin<Porte, 6> Pe6;
    -
    279 typedef TPin<Porte, 7> Pe7;
    -
    280 #endif
    -
    281 
    -
    282 #ifdef USE_PORTF
    -
    283 typedef TPin<Portf, 0> Pf0;
    -
    284 typedef TPin<Portf, 1> Pf1;
    -
    285 typedef TPin<Portf, 2> Pf2;
    -
    286 typedef TPin<Portf, 3> Pf3;
    -
    287 typedef TPin<Portf, 4> Pf4;
    -
    288 typedef TPin<Portf, 5> Pf5;
    -
    289 typedef TPin<Portf, 6> Pf6;
    -
    290 typedef TPin<Portf, 7> Pf7;
    -
    291 #endif
    -
    292 
    -
    293 #ifdef USE_PORTG
    -
    294 typedef TPin<Portg, 0> Pg0;
    -
    295 typedef TPin<Portg, 1> Pg1;
    -
    296 typedef TPin<Portg, 2> Pg2;
    -
    297 typedef TPin<Portg, 3> Pg3;
    -
    298 typedef TPin<Portg, 4> Pg4;
    -
    299 typedef TPin<Portg, 5> Pg5;
    -
    300 typedef TPin<Portg, 6> Pg6;
    -
    301 typedef TPin<Portg, 7> Pg7;
    -
    302 #endif
    -
    303 
    -
    304 #ifdef USE_PORTH
    -
    305 typedef TPin<Porth, 0> Ph0;
    -
    306 typedef TPin<Porth, 1> Ph1;
    -
    307 typedef TPin<Porth, 2> Ph2;
    -
    308 typedef TPin<Porth, 3> Ph3;
    -
    309 typedef TPin<Porth, 4> Ph4;
    -
    310 typedef TPin<Porth, 5> Ph5;
    -
    311 typedef TPin<Porth, 6> Ph6;
    -
    312 typedef TPin<Porth, 7> Ph7;
    -
    313 #endif
    -
    314 
    -
    315 #ifdef USE_PORTJ
    -
    316 typedef TPin<Portj, 0> Pj0;
    -
    317 typedef TPin<Portj, 1> Pj1;
    -
    318 typedef TPin<Portj, 2> Pj2;
    -
    319 typedef TPin<Portj, 3> Pj3;
    -
    320 typedef TPin<Portj, 4> Pj4;
    -
    321 typedef TPin<Portj, 5> Pj5;
    -
    322 typedef TPin<Portj, 6> Pj6;
    -
    323 typedef TPin<Portj, 7> Pj7;
    -
    324 #endif
    -
    325 
    -
    326 #ifdef USE_PORTK
    -
    327 typedef TPin<Portk, 0> Pk0;
    -
    328 typedef TPin<Portk, 1> Pk1;
    -
    329 typedef TPin<Portk, 2> Pk2;
    -
    330 typedef TPin<Portk, 3> Pk3;
    -
    331 typedef TPin<Portk, 4> Pk4;
    -
    332 typedef TPin<Portk, 5> Pk5;
    -
    333 typedef TPin<Portk, 6> Pk6;
    -
    334 typedef TPin<Portk, 7> Pk7;
    -
    335 #endif
    -
    336 
    -
    337 #ifdef USE_PORTL
    -
    338 typedef TPin<Portl, 0> Pl0;
    -
    339 typedef TPin<Portl, 1> Pl1;
    -
    340 typedef TPin<Portl, 2> Pl2;
    -
    341 typedef TPin<Portl, 3> Pl3;
    -
    342 typedef TPin<Portl, 4> Pl4;
    -
    343 typedef TPin<Portl, 5> Pl5;
    -
    344 typedef TPin<Portl, 6> Pl6;
    -
    345 typedef TPin<Portl, 7> Pl7;
    -
    346 #endif
    -
    347 
    -
    348 #ifdef USE_PORTQ
    -
    349 typedef TPin<Portq, 0> Pq0;
    -
    350 typedef TPin<Portq, 1> Pq1;
    -
    351 typedef TPin<Portq, 2> Pq2;
    -
    352 typedef TPin<Portq, 3> Pq3;
    -
    353 typedef TPin<Portq, 4> Pq4;
    -
    354 typedef TPin<Portq, 5> Pq5;
    -
    355 typedef TPin<Portq, 6> Pq6;
    -
    356 typedef TPin<Portq, 7> Pq7;
    -
    357 #endif
    -
    358 
    -
    359 #ifdef USE_PORTR
    -
    360 typedef TPin<Portr, 0> Pr0;
    -
    361 typedef TPin<Portr, 1> Pr1;
    -
    362 typedef TPin<Portr, 2> Pr2;
    -
    363 typedef TPin<Portr, 3> Pr3;
    -
    364 typedef TPin<Portr, 4> Pr4;
    -
    365 typedef TPin<Portr, 5> Pr5;
    -
    366 typedef TPin<Portr, 6> Pr6;
    -
    367 typedef TPin<Portr, 7> Pr7;
    -
    368 #endif
    -
    369 
    -
    370 #ifdef USE_TCCR0A
    -
    371 typedef TCom<Tccr0a, COM0A1> Tc0a; //P6
    -
    372 typedef TCom<Tccr0a, COM0B1> Tc0b; //P5
    -
    373 #endif
    -
    374 
    -
    375 #ifdef USE_TCCR1A
    -
    376 typedef TCom<Tccr1a, COM1A1> Tc1a; //P9
    -
    377 typedef TCom<Tccr1a, COM1B1> Tc1b; //P10
    -
    378 #endif
    -
    379 
    -
    380 #ifdef USE_TCCR2A
    -
    381 typedef TCom<Tccr2a, COM2A1> Tc2a; //P11
    -
    382 typedef TCom<Tccr2a, COM2B1> Tc2b; //P3
    -
    383 #endif
    -
    384 
    -
    385 template<typename Tp_pin, typename Tc_bit>
    -
    386  class Tp_Tc
    -
    387  {
    -
    388  public:
    -
    389  static void SetDir(uint8_t val){
    -
    390  if(val)
    -
    391  SetDirWrite();
    -
    392  else SetDirRead();
    -
    393  }
    -
    394  static void SetDirRead(){
    -
    395  Tp_pin::SetDirRead(); //set pin direction
    -
    396  Tc_bit::Clear(); //disconnect pin from PWM
    -
    397  }
    -
    398  static void SetDirWrite(){
    -
    399  Tp_pin::SetDirWrite();
    -
    400  Tc_bit::Clear();
    -
    401  }
    -
    402  };
    -
    403 
    -
    404 /* pin definitions for cases where it's necessary to clear compare output mode bits */
    -
    405 
    -
    406 //typedef Tp_Tc<Pd3, Tc2b> P3; //Arduino pin 3
    -
    407 //typedef Tp_Tc<Pd5, Tc0b> P5; //Arduino pin 5
    -
    408 //typedef Tp_Tc<Pd6, Tc0a> P6; //Arduino pin 6
    -
    409 //typedef Tp_Tc<Pb1, Tc1a> P9; //Arduino pin 9
    -
    410 //typedef Tp_Tc<Pb2, Tc1b> P10; //Arduino pin 10
    -
    411 //typedef Tp_Tc<Pb3, Tc2a> P11; //Arduino pin 11
    -
    412 
    -
    413 /* Arduino pin definitions */
    -
    414 #if defined(__AVR_ATmega1280__) || (__AVR_ATmega2560__)
    -
    415 
    -
    416 // "Mega" Arduino pin numbers
    -
    417 
    -
    418 #define P0 Pe0
    -
    419 #define P1 Pe1
    -
    420 #define P2 Pe4
    -
    421 #define P3 Pe5
    -
    422 #define P4 Pg5
    -
    423 #define P5 Pe5
    -
    424 #define P6 Ph3
    -
    425 #define P7 Ph4
    -
    426 
    -
    427 #define P8 Ph5
    -
    428 #define P9 Ph6
    -
    429 #define P10 Pb4
    -
    430 #define P11 Pb5
    -
    431 #define P12 Pb6
    -
    432 #define P13 Pb7
    -
    433 
    -
    434 #define P14 Pj1
    -
    435 #define P15 Pj0
    -
    436 #define P16 Ph1
    -
    437 #define P17 Ph0
    -
    438 #define P18 Pd3
    -
    439 #define P19 Pd2
    -
    440 #define P20 Pd1
    -
    441 #define P21 Pd0
    -
    442 
    -
    443 #define P22 Pa0
    -
    444 #define P23 Pa1
    -
    445 #define P24 Pa2
    -
    446 #define P25 Pa3
    -
    447 #define P26 Pa4
    -
    448 #define P27 Pa5
    -
    449 #define P28 Pa6
    -
    450 #define P29 Pa7
    -
    451 #define P30 Pc7
    -
    452 #define P31 Pc6
    -
    453 #define P32 Pc5
    -
    454 #define P33 Pc4
    -
    455 #define P34 Pc3
    -
    456 #define P35 Pc2
    -
    457 #define P36 Pc1
    -
    458 #define P37 Pc0
    -
    459 
    -
    460 #define P38 Pd7
    -
    461 #define P39 Pg2
    -
    462 #define P40 Pg1
    -
    463 #define P41 Pg0
    -
    464 #define P42 Pl7
    -
    465 #define P43 Pl6
    -
    466 #define P44 Pl5
    -
    467 #define P45 Pl4
    -
    468 #define P46 Pl3
    -
    469 #define P47 Pl2
    -
    470 #define P48 Pl1
    -
    471 #define P49 Pl0
    -
    472 #define P50 Pb3
    -
    473 #define P51 Pb2
    -
    474 #define P52 Pb1
    -
    475 #define P53 Pb0
    -
    476 #define P54 Pe6 // INT on Arduino ADK
    -
    477 
    -
    478 #endif //"Mega" pin numbers
    -
    479 
    -
    480 #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    -
    481 //"Classic" Arduino pin numbers
    -
    482 
    -
    483 #define P0 Pd0
    -
    484 #define P1 Pd1
    -
    485 #define P2 Pd2
    -
    486 #define P3 Pd3
    -
    487 #define P4 Pd4
    -
    488 #define P5 Pd5
    -
    489 #define P6 Pd6
    -
    490 #define P7 Pd7
    -
    491 
    -
    492 #define P8 Pb0
    -
    493 #define P9 Pb1
    -
    494 #define P10 Pb2
    -
    495 #define P11 Pb3
    -
    496 #define P12 Pb4
    -
    497 #define P13 Pb5
    -
    498 
    -
    499 #define P14 Pc0
    -
    500 #define P15 Pc1
    -
    501 #define P16 Pc2
    -
    502 #define P17 Pc3
    -
    503 #define P18 Pc4
    -
    504 #define P19 Pc5
    -
    505 
    -
    506 #endif // "Classic" Arduino pin numbers
    -
    507 
    -
    508 #if !defined(BOARD_TEENSY) && defined(__AVR_ATmega32U4__)
    -
    509 // Arduino Leonardo pin numbers
    -
    510 
    -
    511 #define P0 Pd2 // D0 - PD2
    -
    512 #define P1 Pd3 // D1 - PD3
    -
    513 #define P2 Pd1 // D2 - PD1
    -
    514 #define P3 Pd0 // D3 - PD0
    -
    515 #define P4 Pd4 // D4 - PD4
    -
    516 #define P5 Pc6 // D5 - PC6
    -
    517 #define P6 Pd7 // D6 - PD7
    -
    518 #define P7 Pe6 // D7 - PE6
    -
    519 
    -
    520 #define P8 Pb4 // D8 - PB4
    -
    521 #define P9 Pb5 // D9 - PB5
    -
    522 #define P10 Pb6 // D10 - PB6
    -
    523 #define P11 Pb7 // D11 - PB7
    -
    524 #define P12 Pd6 // D12 - PD6
    -
    525 #define P13 Pc7 // D13 - PC7
    -
    526 
    -
    527 #define P14 Pb3 // D14 - MISO - PB3
    -
    528 #define P15 Pb1 // D15 - SCK - PB1
    -
    529 #define P16 Pb2 // D16 - MOSI - PB2
    -
    530 #define P17 Pb0 // D17 - SS - PB0
    -
    531 
    -
    532 #define P18 Pf7 // D18 - A0 - PF7
    -
    533 #define P19 Pf6 // D19 - A1 - PF6
    -
    534 #define P20 Pf5 // D20 - A2 - PF5
    -
    535 #define P21 Pf4 // D21 - A3 - PF4
    -
    536 #define P22 Pf1 // D22 - A4 - PF1
    -
    537 #define P23 Pf0 // D23 - A5 - PF0
    -
    538 
    -
    539 #define P24 Pd4 // D24 / D4 - A6 - PD4
    -
    540 #define P25 Pd7 // D25 / D6 - A7 - PD7
    -
    541 #define P26 Pb4 // D26 / D8 - A8 - PB4
    -
    542 #define P27 Pb5 // D27 / D9 - A9 - PB5
    -
    543 #define P28 Pb6 // D28 / D10 - A10 - PB6
    -
    544 #define P29 Pd6 // D29 / D12 - A11 - PD6
    -
    545 
    -
    546 #endif // Arduino Leonardo pin numbers
    -
    547 
    -
    548 #if defined(BOARD_TEENSY) && defined(__AVR_ATmega32U4__)
    -
    549 // Teensy 2.0 pin numbers
    -
    550 // http://www.pjrc.com/teensy/pinout.html
    -
    551 #define P0 Pb0
    -
    552 #define P1 Pb1
    -
    553 #define P2 Pb2
    -
    554 #define P3 Pb3
    -
    555 #define P4 Pb7
    -
    556 #define P5 Pd0
    -
    557 #define P6 Pd1
    -
    558 #define P7 Pd2
    -
    559 #define P8 Pd3
    -
    560 #define P9 Pc6
    -
    561 #define P10 Pc7
    -
    562 #define P11 Pd6
    -
    563 #define P12 Pd7
    -
    564 #define P13 Pb4
    -
    565 #define P14 Pb5
    -
    566 #define P15 Pb6
    -
    567 #define P16 Pf7
    -
    568 #define P17 Pf6
    -
    569 #define P18 Pf5
    -
    570 #define P19 Pf4
    -
    571 #define P20 Pf1
    -
    572 #define P21 Pf0
    -
    573 #define P22 Pd4
    -
    574 #define P23 Pd5
    -
    575 #define P24 Pe6
    -
    576 #endif // Teensy 2.0
    -
    577 
    -
    578 #if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
    -
    579 // Teensy++ 2.0 pin numbers
    -
    580 // http://www.pjrc.com/teensy/pinout.html
    -
    581 #define P0 Pd0
    -
    582 #define P1 Pd1
    -
    583 #define P2 Pd2
    -
    584 #define P3 Pd3
    -
    585 #define P4 Pd4
    -
    586 #define P5 Pd5
    -
    587 #define P6 Pd6
    -
    588 #define P7 Pd7
    -
    589 #define P8 Pe0
    -
    590 #define P9 Pe1
    -
    591 #define P10 Pc0
    -
    592 #define P11 Pc1
    -
    593 #define P12 Pc2
    -
    594 #define P13 Pc3
    -
    595 #define P14 Pc4
    -
    596 #define P15 Pc5
    -
    597 #define P16 Pc6
    -
    598 #define P17 Pc7
    -
    599 #define P18 Pe6
    -
    600 #define P19 Pe7
    -
    601 #define P20 Pb0
    -
    602 #define P21 Pb1
    -
    603 #define P22 Pb2
    -
    604 #define P23 Pb3
    -
    605 #define P24 Pb4
    -
    606 #define P25 Pb5
    -
    607 #define P26 Pb6
    -
    608 #define P27 Pb7
    -
    609 #define P28 Pa0
    -
    610 #define P29 Pa1
    -
    611 #define P30 Pa2
    -
    612 #define P31 Pa3
    -
    613 #define P32 Pa4
    -
    614 #define P33 Pa5
    -
    615 #define P34 Pa6
    -
    616 #define P35 Pa7
    -
    617 #define P36 Pe4
    -
    618 #define P37 Pe5
    -
    619 #define P38 Pf0
    -
    620 #define P39 Pf1
    -
    621 #define P40 Pf2
    -
    622 #define P41 Pf3
    -
    623 #define P42 Pf4
    -
    624 #define P43 Pf5
    -
    625 #define P44 Pf6
    -
    626 #define P45 Pf7
    -
    627 #endif // Teensy++ 2.0
    -
    628 
    -
    629 #if defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__)
    -
    630 // Sanguino pin numbers
    -
    631 // http://sanguino.cc/hardware
    -
    632 #define P0 Pb0
    -
    633 #define P1 Pb1
    -
    634 #define P2 Pb2
    -
    635 #define P3 Pb3
    -
    636 #define P4 Pb4
    -
    637 #define P5 Pb5
    -
    638 #define P6 Pb6
    -
    639 #define P7 Pb7
    -
    640 #define P8 Pd0
    -
    641 #define P9 Pd1
    -
    642 #define P10 Pd2
    -
    643 #define P11 Pd3
    -
    644 #define P12 Pd4
    -
    645 #define P13 Pd5
    -
    646 #define P14 Pd6
    -
    647 #define P15 Pd7
    -
    648 #define P16 Pc0
    -
    649 #define P17 Pc1
    -
    650 #define P18 Pc2
    -
    651 #define P19 Pc3
    -
    652 #define P20 Pc4
    -
    653 #define P21 Pc5
    -
    654 #define P22 Pc6
    -
    655 #define P23 Pc7
    -
    656 #define P24 Pa0
    -
    657 #define P25 Pa1
    -
    658 #define P26 Pa2
    -
    659 #define P27 Pa3
    -
    660 #define P28 Pa4
    -
    661 #define P29 Pa5
    -
    662 #define P30 Pa6
    -
    663 #define P31 Pa7
    -
    664 #endif // Sanguino
    -
    665 
    -
    666 #endif //_avrpins_h_
    +
    226  static void Toggle() { TCCR::Toggle(1 << COM); }
    +
    227  }; //class TCom...
    +
    228 
    +
    229 //Short pin definitions
    +
    230 #ifdef USE_PORTA
    +
    231 typedef TPin<Porta, 0> Pa0;
    +
    232 typedef TPin<Porta, 1> Pa1;
    +
    233 typedef TPin<Porta, 2> Pa2;
    +
    234 typedef TPin<Porta, 3> Pa3;
    +
    235 typedef TPin<Porta, 4> Pa4;
    +
    236 typedef TPin<Porta, 5> Pa5;
    +
    237 typedef TPin<Porta, 6> Pa6;
    +
    238 typedef TPin<Porta, 7> Pa7;
    +
    239 #endif
    +
    240 
    +
    241 #ifdef USE_PORTB
    +
    242 typedef TPin<Portb, 0> Pb0;
    +
    243 typedef TPin<Portb, 1> Pb1;
    +
    244 typedef TPin<Portb, 2> Pb2;
    +
    245 typedef TPin<Portb, 3> Pb3;
    +
    246 typedef TPin<Portb, 4> Pb4;
    +
    247 typedef TPin<Portb, 5> Pb5;
    +
    248 typedef TPin<Portb, 6> Pb6;
    +
    249 typedef TPin<Portb, 7> Pb7;
    +
    250 #endif
    +
    251 
    +
    252 #ifdef USE_PORTC
    +
    253 typedef TPin<Portc, 0> Pc0;
    +
    254 typedef TPin<Portc, 1> Pc1;
    +
    255 typedef TPin<Portc, 2> Pc2;
    +
    256 typedef TPin<Portc, 3> Pc3;
    +
    257 typedef TPin<Portc, 4> Pc4;
    +
    258 typedef TPin<Portc, 5> Pc5;
    +
    259 typedef TPin<Portc, 6> Pc6;
    +
    260 typedef TPin<Portc, 7> Pc7;
    +
    261 #endif
    +
    262 
    +
    263 #ifdef USE_PORTD
    +
    264 typedef TPin<Portd, 0> Pd0;
    +
    265 typedef TPin<Portd, 1> Pd1;
    +
    266 typedef TPin<Portd, 2> Pd2;
    +
    267 typedef TPin<Portd, 3> Pd3;
    +
    268 typedef TPin<Portd, 4> Pd4;
    +
    269 typedef TPin<Portd, 5> Pd5;
    +
    270 typedef TPin<Portd, 6> Pd6;
    +
    271 typedef TPin<Portd, 7> Pd7;
    +
    272 #endif
    +
    273 
    +
    274 #ifdef USE_PORTE
    +
    275 typedef TPin<Porte, 0> Pe0;
    +
    276 typedef TPin<Porte, 1> Pe1;
    +
    277 typedef TPin<Porte, 2> Pe2;
    +
    278 typedef TPin<Porte, 3> Pe3;
    +
    279 typedef TPin<Porte, 4> Pe4;
    +
    280 typedef TPin<Porte, 5> Pe5;
    +
    281 typedef TPin<Porte, 6> Pe6;
    +
    282 typedef TPin<Porte, 7> Pe7;
    +
    283 #endif
    +
    284 
    +
    285 #ifdef USE_PORTF
    +
    286 typedef TPin<Portf, 0> Pf0;
    +
    287 typedef TPin<Portf, 1> Pf1;
    +
    288 typedef TPin<Portf, 2> Pf2;
    +
    289 typedef TPin<Portf, 3> Pf3;
    +
    290 typedef TPin<Portf, 4> Pf4;
    +
    291 typedef TPin<Portf, 5> Pf5;
    +
    292 typedef TPin<Portf, 6> Pf6;
    +
    293 typedef TPin<Portf, 7> Pf7;
    +
    294 #endif
    +
    295 
    +
    296 #ifdef USE_PORTG
    +
    297 typedef TPin<Portg, 0> Pg0;
    +
    298 typedef TPin<Portg, 1> Pg1;
    +
    299 typedef TPin<Portg, 2> Pg2;
    +
    300 typedef TPin<Portg, 3> Pg3;
    +
    301 typedef TPin<Portg, 4> Pg4;
    +
    302 typedef TPin<Portg, 5> Pg5;
    +
    303 typedef TPin<Portg, 6> Pg6;
    +
    304 typedef TPin<Portg, 7> Pg7;
    +
    305 #endif
    +
    306 
    +
    307 #ifdef USE_PORTH
    +
    308 typedef TPin<Porth, 0> Ph0;
    +
    309 typedef TPin<Porth, 1> Ph1;
    +
    310 typedef TPin<Porth, 2> Ph2;
    +
    311 typedef TPin<Porth, 3> Ph3;
    +
    312 typedef TPin<Porth, 4> Ph4;
    +
    313 typedef TPin<Porth, 5> Ph5;
    +
    314 typedef TPin<Porth, 6> Ph6;
    +
    315 typedef TPin<Porth, 7> Ph7;
    +
    316 #endif
    +
    317 
    +
    318 #ifdef USE_PORTJ
    +
    319 typedef TPin<Portj, 0> Pj0;
    +
    320 typedef TPin<Portj, 1> Pj1;
    +
    321 typedef TPin<Portj, 2> Pj2;
    +
    322 typedef TPin<Portj, 3> Pj3;
    +
    323 typedef TPin<Portj, 4> Pj4;
    +
    324 typedef TPin<Portj, 5> Pj5;
    +
    325 typedef TPin<Portj, 6> Pj6;
    +
    326 typedef TPin<Portj, 7> Pj7;
    +
    327 #endif
    +
    328 
    +
    329 #ifdef USE_PORTK
    +
    330 typedef TPin<Portk, 0> Pk0;
    +
    331 typedef TPin<Portk, 1> Pk1;
    +
    332 typedef TPin<Portk, 2> Pk2;
    +
    333 typedef TPin<Portk, 3> Pk3;
    +
    334 typedef TPin<Portk, 4> Pk4;
    +
    335 typedef TPin<Portk, 5> Pk5;
    +
    336 typedef TPin<Portk, 6> Pk6;
    +
    337 typedef TPin<Portk, 7> Pk7;
    +
    338 #endif
    +
    339 
    +
    340 #ifdef USE_PORTL
    +
    341 typedef TPin<Portl, 0> Pl0;
    +
    342 typedef TPin<Portl, 1> Pl1;
    +
    343 typedef TPin<Portl, 2> Pl2;
    +
    344 typedef TPin<Portl, 3> Pl3;
    +
    345 typedef TPin<Portl, 4> Pl4;
    +
    346 typedef TPin<Portl, 5> Pl5;
    +
    347 typedef TPin<Portl, 6> Pl6;
    +
    348 typedef TPin<Portl, 7> Pl7;
    +
    349 #endif
    +
    350 
    +
    351 #ifdef USE_PORTQ
    +
    352 typedef TPin<Portq, 0> Pq0;
    +
    353 typedef TPin<Portq, 1> Pq1;
    +
    354 typedef TPin<Portq, 2> Pq2;
    +
    355 typedef TPin<Portq, 3> Pq3;
    +
    356 typedef TPin<Portq, 4> Pq4;
    +
    357 typedef TPin<Portq, 5> Pq5;
    +
    358 typedef TPin<Portq, 6> Pq6;
    +
    359 typedef TPin<Portq, 7> Pq7;
    +
    360 #endif
    +
    361 
    +
    362 #ifdef USE_PORTR
    +
    363 typedef TPin<Portr, 0> Pr0;
    +
    364 typedef TPin<Portr, 1> Pr1;
    +
    365 typedef TPin<Portr, 2> Pr2;
    +
    366 typedef TPin<Portr, 3> Pr3;
    +
    367 typedef TPin<Portr, 4> Pr4;
    +
    368 typedef TPin<Portr, 5> Pr5;
    +
    369 typedef TPin<Portr, 6> Pr6;
    +
    370 typedef TPin<Portr, 7> Pr7;
    +
    371 #endif
    +
    372 
    +
    373 #ifdef USE_TCCR0A
    +
    374 typedef TCom<Tccr0a, COM0A1> Tc0a; //P6
    +
    375 typedef TCom<Tccr0a, COM0B1> Tc0b; //P5
    +
    376 #endif
    +
    377 
    +
    378 #ifdef USE_TCCR1A
    +
    379 typedef TCom<Tccr1a, COM1A1> Tc1a; //P9
    +
    380 typedef TCom<Tccr1a, COM1B1> Tc1b; //P10
    +
    381 #endif
    +
    382 
    +
    383 #ifdef USE_TCCR2A
    +
    384 typedef TCom<Tccr2a, COM2A1> Tc2a; //P11
    +
    385 typedef TCom<Tccr2a, COM2B1> Tc2b; //P3
    +
    386 #endif
    +
    387 
    +
    388 template<typename Tp_pin, typename Tc_bit>
    +
    389  class Tp_Tc
    +
    390  {
    +
    391  public:
    +
    392  static void SetDir(uint8_t val){
    +
    393  if(val)
    +
    394  SetDirWrite();
    +
    395  else SetDirRead();
    +
    396  }
    +
    397  static void SetDirRead(){
    +
    398  Tp_pin::SetDirRead(); //set pin direction
    +
    399  Tc_bit::Clear(); //disconnect pin from PWM
    +
    400  }
    +
    401  static void SetDirWrite(){
    +
    402  Tp_pin::SetDirWrite();
    +
    403  Tc_bit::Clear();
    +
    404  }
    +
    405  };
    +
    406 
    +
    407 /* pin definitions for cases where it's necessary to clear compare output mode bits */
    +
    408 
    +
    409 //typedef Tp_Tc<Pd3, Tc2b> P3; //Arduino pin 3
    +
    410 //typedef Tp_Tc<Pd5, Tc0b> P5; //Arduino pin 5
    +
    411 //typedef Tp_Tc<Pd6, Tc0a> P6; //Arduino pin 6
    +
    412 //typedef Tp_Tc<Pb1, Tc1a> P9; //Arduino pin 9
    +
    413 //typedef Tp_Tc<Pb2, Tc1b> P10; //Arduino pin 10
    +
    414 //typedef Tp_Tc<Pb3, Tc2a> P11; //Arduino pin 11
    +
    415 
    +
    416 /* Arduino pin definitions */
    +
    417 #if defined(__AVR_ATmega1280__) || (__AVR_ATmega2560__)
    +
    418 
    +
    419 // "Mega" Arduino pin numbers
    +
    420 
    +
    421 #define P0 Pe0
    +
    422 #define P1 Pe1
    +
    423 #define P2 Pe4
    +
    424 #define P3 Pe5
    +
    425 #define P4 Pg5
    +
    426 #define P5 Pe5
    +
    427 #define P6 Ph3
    +
    428 #define P7 Ph4
    +
    429 
    +
    430 #define P8 Ph5
    +
    431 #define P9 Ph6
    +
    432 #define P10 Pb4
    +
    433 #define P11 Pb5
    +
    434 #define P12 Pb6
    +
    435 #define P13 Pb7
    +
    436 
    +
    437 #define P14 Pj1
    +
    438 #define P15 Pj0
    +
    439 #define P16 Ph1
    +
    440 #define P17 Ph0
    +
    441 #define P18 Pd3
    +
    442 #define P19 Pd2
    +
    443 #define P20 Pd1
    +
    444 #define P21 Pd0
    +
    445 
    +
    446 #define P22 Pa0
    +
    447 #define P23 Pa1
    +
    448 #define P24 Pa2
    +
    449 #define P25 Pa3
    +
    450 #define P26 Pa4
    +
    451 #define P27 Pa5
    +
    452 #define P28 Pa6
    +
    453 #define P29 Pa7
    +
    454 #define P30 Pc7
    +
    455 #define P31 Pc6
    +
    456 #define P32 Pc5
    +
    457 #define P33 Pc4
    +
    458 #define P34 Pc3
    +
    459 #define P35 Pc2
    +
    460 #define P36 Pc1
    +
    461 #define P37 Pc0
    +
    462 
    +
    463 #define P38 Pd7
    +
    464 #define P39 Pg2
    +
    465 #define P40 Pg1
    +
    466 #define P41 Pg0
    +
    467 #define P42 Pl7
    +
    468 #define P43 Pl6
    +
    469 #define P44 Pl5
    +
    470 #define P45 Pl4
    +
    471 #define P46 Pl3
    +
    472 #define P47 Pl2
    +
    473 #define P48 Pl1
    +
    474 #define P49 Pl0
    +
    475 #define P50 Pb3
    +
    476 #define P51 Pb2
    +
    477 #define P52 Pb1
    +
    478 #define P53 Pb0
    +
    479 #define P54 Pe6 // INT on Arduino ADK
    +
    480 
    +
    481 #endif //"Mega" pin numbers
    +
    482 
    +
    483 #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    +
    484 //"Classic" Arduino pin numbers
    +
    485 
    +
    486 #define P0 Pd0
    +
    487 #define P1 Pd1
    +
    488 #define P2 Pd2
    +
    489 #define P3 Pd3
    +
    490 #define P4 Pd4
    +
    491 #define P5 Pd5
    +
    492 #define P6 Pd6
    +
    493 #define P7 Pd7
    +
    494 
    +
    495 #define P8 Pb0
    +
    496 #define P9 Pb1
    +
    497 #define P10 Pb2
    +
    498 #define P11 Pb3
    +
    499 #define P12 Pb4
    +
    500 #define P13 Pb5
    +
    501 
    +
    502 #define P14 Pc0
    +
    503 #define P15 Pc1
    +
    504 #define P16 Pc2
    +
    505 #define P17 Pc3
    +
    506 #define P18 Pc4
    +
    507 #define P19 Pc5
    +
    508 
    +
    509 #endif // "Classic" Arduino pin numbers
    +
    510 
    +
    511 #if !defined(BOARD_TEENSY) && defined(__AVR_ATmega32U4__)
    +
    512 // Arduino Leonardo pin numbers
    +
    513 
    +
    514 #define P0 Pd2 // D0 - PD2
    +
    515 #define P1 Pd3 // D1 - PD3
    +
    516 #define P2 Pd1 // D2 - PD1
    +
    517 #define P3 Pd0 // D3 - PD0
    +
    518 #define P4 Pd4 // D4 - PD4
    +
    519 #define P5 Pc6 // D5 - PC6
    +
    520 #define P6 Pd7 // D6 - PD7
    +
    521 #define P7 Pe6 // D7 - PE6
    +
    522 
    +
    523 #define P8 Pb4 // D8 - PB4
    +
    524 #define P9 Pb5 // D9 - PB5
    +
    525 #define P10 Pb6 // D10 - PB6
    +
    526 #define P11 Pb7 // D11 - PB7
    +
    527 #define P12 Pd6 // D12 - PD6
    +
    528 #define P13 Pc7 // D13 - PC7
    +
    529 
    +
    530 #define P14 Pb3 // D14 - MISO - PB3
    +
    531 #define P15 Pb1 // D15 - SCK - PB1
    +
    532 #define P16 Pb2 // D16 - MOSI - PB2
    +
    533 #define P17 Pb0 // D17 - SS - PB0
    +
    534 
    +
    535 #define P18 Pf7 // D18 - A0 - PF7
    +
    536 #define P19 Pf6 // D19 - A1 - PF6
    +
    537 #define P20 Pf5 // D20 - A2 - PF5
    +
    538 #define P21 Pf4 // D21 - A3 - PF4
    +
    539 #define P22 Pf1 // D22 - A4 - PF1
    +
    540 #define P23 Pf0 // D23 - A5 - PF0
    +
    541 
    +
    542 #define P24 Pd4 // D24 / D4 - A6 - PD4
    +
    543 #define P25 Pd7 // D25 / D6 - A7 - PD7
    +
    544 #define P26 Pb4 // D26 / D8 - A8 - PB4
    +
    545 #define P27 Pb5 // D27 / D9 - A9 - PB5
    +
    546 #define P28 Pb6 // D28 / D10 - A10 - PB6
    +
    547 #define P29 Pd6 // D29 / D12 - A11 - PD6
    +
    548 
    +
    549 #endif // Arduino Leonardo pin numbers
    +
    550 
    +
    551 #if defined(BOARD_TEENSY) && defined(__AVR_ATmega32U4__)
    +
    552 // Teensy 2.0 pin numbers
    +
    553 // http://www.pjrc.com/teensy/pinout.html
    +
    554 #define P0 Pb0
    +
    555 #define P1 Pb1
    +
    556 #define P2 Pb2
    +
    557 #define P3 Pb3
    +
    558 #define P4 Pb7
    +
    559 #define P5 Pd0
    +
    560 #define P6 Pd1
    +
    561 #define P7 Pd2
    +
    562 #define P8 Pd3
    +
    563 #define P9 Pc6
    +
    564 #define P10 Pc7
    +
    565 #define P11 Pd6
    +
    566 #define P12 Pd7
    +
    567 #define P13 Pb4
    +
    568 #define P14 Pb5
    +
    569 #define P15 Pb6
    +
    570 #define P16 Pf7
    +
    571 #define P17 Pf6
    +
    572 #define P18 Pf5
    +
    573 #define P19 Pf4
    +
    574 #define P20 Pf1
    +
    575 #define P21 Pf0
    +
    576 #define P22 Pd4
    +
    577 #define P23 Pd5
    +
    578 #define P24 Pe6
    +
    579 #endif // Teensy 2.0
    +
    580 
    +
    581 #if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
    +
    582 // Teensy++ 2.0 pin numbers
    +
    583 // http://www.pjrc.com/teensy/pinout.html
    +
    584 #define P0 Pd0
    +
    585 #define P1 Pd1
    +
    586 #define P2 Pd2
    +
    587 #define P3 Pd3
    +
    588 #define P4 Pd4
    +
    589 #define P5 Pd5
    +
    590 #define P6 Pd6
    +
    591 #define P7 Pd7
    +
    592 #define P8 Pe0
    +
    593 #define P9 Pe1
    +
    594 #define P10 Pc0
    +
    595 #define P11 Pc1
    +
    596 #define P12 Pc2
    +
    597 #define P13 Pc3
    +
    598 #define P14 Pc4
    +
    599 #define P15 Pc5
    +
    600 #define P16 Pc6
    +
    601 #define P17 Pc7
    +
    602 #define P18 Pe6
    +
    603 #define P19 Pe7
    +
    604 #define P20 Pb0
    +
    605 #define P21 Pb1
    +
    606 #define P22 Pb2
    +
    607 #define P23 Pb3
    +
    608 #define P24 Pb4
    +
    609 #define P25 Pb5
    +
    610 #define P26 Pb6
    +
    611 #define P27 Pb7
    +
    612 #define P28 Pa0
    +
    613 #define P29 Pa1
    +
    614 #define P30 Pa2
    +
    615 #define P31 Pa3
    +
    616 #define P32 Pa4
    +
    617 #define P33 Pa5
    +
    618 #define P34 Pa6
    +
    619 #define P35 Pa7
    +
    620 #define P36 Pe4
    +
    621 #define P37 Pe5
    +
    622 #define P38 Pf0
    +
    623 #define P39 Pf1
    +
    624 #define P40 Pf2
    +
    625 #define P41 Pf3
    +
    626 #define P42 Pf4
    +
    627 #define P43 Pf5
    +
    628 #define P44 Pf6
    +
    629 #define P45 Pf7
    +
    630 #endif // Teensy++ 2.0
    +
    631 
    +
    632 #if !defined(BOARD_SANGUINO) && (defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__))
    +
    633 #define BOARD_BALANDUINO
    +
    634 // Balanduino pin numbers
    +
    635 // http://balanduino.net/
    +
    636 #define P0 Pd0 /* 0 - PD0 */
    +
    637 #define P1 Pd1 /* 1 - PD1 */
    +
    638 #define P2 Pb2 /* 2 - PB2 */
    +
    639 #define P3 Pd6 /* 3 - PD6 */
    +
    640 #define P4 Pd7 /* 4 - PD7 */
    +
    641 #define P5 Pb3 /* 5 - PB3 */
    +
    642 #define P6 Pb4 /* 6 - PB4 */
    +
    643 #define P7 Pa0 /* 7 - PA0 */
    +
    644 #define P8 Pa1 /* 8 - PA1 */
    +
    645 #define P9 Pa2 /* 9 - PA2 */
    +
    646 #define P10 Pa3 /* 10 - PA3 */
    +
    647 #define P11 Pa4 /* 11 - PA4 */
    +
    648 #define P12 Pa5 /* 12 - PA5 */
    +
    649 #define P13 Pc0 /* 13 - PC0 */
    +
    650 #define P14 Pc1 /* 14 - PC1 */
    +
    651 #define P15 Pd2 /* 15 - PD2 */
    +
    652 #define P16 Pd3 /* 16 - PD3 */
    +
    653 #define P17 Pd4 /* 17 - PD4 */
    +
    654 #define P18 Pd5 /* 18 - PD5 */
    +
    655 #define P19 Pc2 /* 19 - PC2 */
    +
    656 #define P20 Pc3 /* 20 - PC3 */
    +
    657 #define P21 Pc4 /* 21 - PC4 */
    +
    658 #define P22 Pc5 /* 22 - PC5 */
    +
    659 #define P23 Pc6 /* 23 - PC6 */
    +
    660 #define P24 Pc7 /* 24 - PC7 */
    +
    661 #define P25 Pb0 /* 25 - PB0 */
    +
    662 #define P26 Pb1 /* 26 - PB1 */
    +
    663 #define P27 Pb5 /* 27 - PB5 */
    +
    664 #define P28 Pb6 /* 28 - PB6 */
    +
    665 #define P29 Pb7 /* 29 - PB7 */
    +
    666 #define P30 Pa6 /* 30 - PA6 */
    +
    667 #define P31 Pa7 /* 31 - PA7 */
    +
    668 #endif // Balanduino
    +
    669 
    +
    670 #if defined(BOARD_SANGUINO) && (defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__))
    +
    671 // Sanguino pin numbers
    +
    672 // http://sanguino.cc/hardware
    +
    673 #define P0 Pb0
    +
    674 #define P1 Pb1
    +
    675 #define P2 Pb2
    +
    676 #define P3 Pb3
    +
    677 #define P4 Pb4
    +
    678 #define P5 Pb5
    +
    679 #define P6 Pb6
    +
    680 #define P7 Pb7
    +
    681 #define P8 Pd0
    +
    682 #define P9 Pd1
    +
    683 #define P10 Pd2
    +
    684 #define P11 Pd3
    +
    685 #define P12 Pd4
    +
    686 #define P13 Pd5
    +
    687 #define P14 Pd6
    +
    688 #define P15 Pd7
    +
    689 #define P16 Pc0
    +
    690 #define P17 Pc1
    +
    691 #define P18 Pc2
    +
    692 #define P19 Pc3
    +
    693 #define P20 Pc4
    +
    694 #define P21 Pc5
    +
    695 #define P22 Pc6
    +
    696 #define P23 Pc7
    +
    697 #define P24 Pa0
    +
    698 #define P25 Pa1
    +
    699 #define P26 Pa2
    +
    700 #define P27 Pa3
    +
    701 #define P28 Pa4
    +
    702 #define P29 Pa5
    +
    703 #define P30 Pa6
    +
    704 #define P31 Pa7
    +
    705 #endif // Sanguino
    +
    706 
    +
    707 #endif //_avrpins_h_
    diff --git a/cdcacm_8cpp.html b/cdcacm_8cpp.html index c5b1704f..6fc86fb0 100644 --- a/cdcacm_8cpp.html +++ b/cdcacm_8cpp.html @@ -96,10 +96,12 @@ Include dependency graph for cdcacm.cpp: - + +

    Go to the source code of this file.

    + diff --git a/cdcacm_8cpp_source.html b/cdcacm_8cpp_source.html new file mode 100644 index 00000000..6cc723f3 --- /dev/null +++ b/cdcacm_8cpp_source.html @@ -0,0 +1,458 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/cdcacm.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    USB_Host_Shield_2.0 +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    cdcacm.cpp
    +
    +
    +Go to the documentation of this file.
    1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
    +
    2 
    +
    3 This software may be distributed and modified under the terms of the GNU
    +
    4 General Public License version 2 (GPL2) as published by the Free Software
    +
    5 Foundation and appearing in the file GPL2.TXT included in the packaging of
    +
    6 this file. Please note that GPL2 Section 2[b] requires that all works based
    +
    7 on this software must also be made publicly available under the terms of
    +
    8 the GPL2 ("Copyleft").
    +
    9 
    +
    10 Contact information
    +
    11 -------------------
    +
    12 
    +
    13 Circuits At Home, LTD
    +
    14 Web : http://www.circuitsathome.com
    +
    15 e-mail : support@circuitsathome.com
    +
    16 */
    +
    17 #include "cdcacm.h"
    +
    18 
    +
    19 const uint8_t ACM::epDataInIndex = 1;
    +
    20 const uint8_t ACM::epDataOutIndex = 2;
    +
    21 const uint8_t ACM::epInterruptInIndex = 3;
    +
    22 
    +
    23 ACM::ACM(USB *p, CDCAsyncOper *pasync) :
    +
    24  pUsb(p),
    +
    25  pAsync(pasync),
    +
    26  bAddress(0),
    +
    27  qNextPollTime(0),
    +
    28  bPollEnable(false),
    +
    29  bControlIface(0),
    +
    30  bDataIface(0),
    +
    31  bNumEP(1),
    +
    32  ready(false)
    +
    33 {
    +
    34  for(uint8_t i=0; i<ACM_MAX_ENDPOINTS; i++)
    +
    35  {
    +
    36  epInfo[i].epAddr = 0;
    +
    37  epInfo[i].maxPktSize = (i) ? 0 : 8;
    +
    38  epInfo[i].epAttribs = 0;
    + +
    40  //epInfo[i].bmNakPower = USB_NAK_MAX_POWER;
    +
    41 
    +
    42  if (!i)
    + +
    44 
    +
    45  }
    +
    46  if (pUsb)
    + +
    48 }
    +
    49 
    +
    50 uint8_t ACM::Init(uint8_t parent, uint8_t port, bool lowspeed)
    +
    51 {
    +
    52  const uint8_t constBufSize = sizeof(USB_DEVICE_DESCRIPTOR);
    +
    53 
    +
    54  uint8_t buf[constBufSize];
    +
    55  uint8_t rcode;
    +
    56  UsbDevice *p = NULL;
    +
    57  EpInfo *oldep_ptr = NULL;
    +
    58  uint8_t num_of_conf; // number of configurations
    +
    59 
    +
    60  AddressPool &addrPool = pUsb->GetAddressPool();
    +
    61 
    +
    62  USBTRACE("ACM Init\r\n");
    +
    63 
    +
    64  if (bAddress)
    + +
    66 
    +
    67  // Get pointer to pseudo device with address 0 assigned
    +
    68  p = addrPool.GetUsbDevicePtr(0);
    +
    69 
    +
    70  if (!p)
    + +
    72 
    +
    73  if (!p->epinfo)
    +
    74  {
    +
    75  USBTRACE("epinfo\r\n");
    + +
    77  }
    +
    78 
    +
    79  // Save old pointer to EP_RECORD of address 0
    +
    80  oldep_ptr = p->epinfo;
    +
    81 
    +
    82  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
    +
    83  p->epinfo = epInfo;
    +
    84 
    +
    85  p->lowspeed = lowspeed;
    +
    86 
    +
    87  // Get device descriptor
    +
    88  rcode = pUsb->getDevDescr( 0, 0, constBufSize, (uint8_t*)buf );
    +
    89 
    +
    90  // Restore p->epinfo
    +
    91  p->epinfo = oldep_ptr;
    +
    92 
    +
    93  if( rcode )
    +
    94  goto FailGetDevDescr;
    +
    95 
    +
    96  // Allocate new address according to device class
    +
    97  bAddress = addrPool.AllocAddress(parent, false, port);
    +
    98 
    +
    99  if (!bAddress)
    + +
    101 
    +
    102  // Extract Max Packet Size from the device descriptor
    +
    103  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
    +
    104 
    +
    105  // Assign new address to the device
    +
    106  rcode = pUsb->setAddr( 0, 0, bAddress );
    +
    107 
    +
    108  if (rcode)
    +
    109  {
    +
    110  p->lowspeed = false;
    +
    111  addrPool.FreeAddress(bAddress);
    +
    112  bAddress = 0;
    +
    113  USBTRACE2("setAddr:",rcode);
    +
    114  return rcode;
    +
    115  }
    +
    116 
    +
    117  USBTRACE2("Addr:", bAddress);
    +
    118 
    +
    119  p->lowspeed = false;
    +
    120 
    +
    121  p = addrPool.GetUsbDevicePtr(bAddress);
    +
    122 
    +
    123  if (!p)
    + +
    125 
    +
    126  p->lowspeed = lowspeed;
    +
    127 
    +
    128  num_of_conf = ((USB_DEVICE_DESCRIPTOR*)buf)->bNumConfigurations;
    +
    129 
    +
    130  // Assign epInfo to epinfo pointer
    +
    131  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
    +
    132 
    +
    133  if (rcode)
    +
    134  goto FailSetDevTblEntry;
    +
    135 
    +
    136  USBTRACE2("NC:", num_of_conf);
    +
    137 
    +
    138  for (uint8_t i=0; i<num_of_conf; i++)
    +
    139  {
    + + + + + +
    145  CP_MASK_COMPARE_PROTOCOL> CdcControlParser(this);
    +
    146 
    + +
    148  CP_MASK_COMPARE_CLASS> CdcDataParser(this);
    +
    149 
    +
    150  rcode = pUsb->getConfDescr(bAddress, 0, i, &CdcControlParser);
    +
    151  rcode = pUsb->getConfDescr(bAddress, 0, i, &CdcDataParser);
    +
    152 
    +
    153  if (bNumEP > 1)
    +
    154  break;
    +
    155  } // for
    +
    156 
    +
    157  if (bNumEP < 4)
    + +
    159 
    +
    160  // Assign epInfo to epinfo pointer
    + +
    162 
    +
    163  USBTRACE2("Conf:", bConfNum);
    +
    164 
    +
    165  // Set Configuration Value
    +
    166  rcode = pUsb->setConf(bAddress, 0, bConfNum);
    +
    167 
    +
    168  if (rcode)
    +
    169  goto FailSetConf;
    +
    170 
    +
    171  rcode = pAsync->OnInit(this);
    +
    172 
    +
    173  if (rcode)
    +
    174  goto FailOnInit;
    +
    175 
    +
    176  USBTRACE("ACM configured\r\n");
    +
    177  ready = true;
    +
    178 
    +
    179  //bPollEnable = true;
    +
    180 
    +
    181  //USBTRACE("Poll enabled\r\n");
    +
    182  return 0;
    +
    183 
    +
    184 FailGetDevDescr:
    +
    185  USBTRACE("getDevDescr:");
    +
    186  goto Fail;
    +
    187 
    +
    188 FailSetDevTblEntry:
    +
    189  USBTRACE("setDevTblEn:");
    +
    190  goto Fail;
    +
    191 
    +
    192 FailGetConfDescr:
    +
    193  USBTRACE("getConf:");
    +
    194  goto Fail;
    +
    195 
    +
    196 FailSetConf:
    +
    197  USBTRACE("setConf:");
    +
    198  goto Fail;
    +
    199 
    +
    200 FailOnInit:
    +
    201  USBTRACE("OnInit:");
    +
    202  goto Fail;
    +
    203 
    +
    204 Fail:
    +
    205  Serial.println(rcode, HEX);
    +
    206  Release();
    +
    207  return rcode;
    +
    208 }
    +
    209 
    +
    210 
    +
    211 void ACM::EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *pep)
    +
    212 {
    +
    213  //ErrorMessage<uint8_t>(PSTR("Conf.Val"), conf);
    +
    214  //ErrorMessage<uint8_t>(PSTR("Iface Num"),iface);
    +
    215  //ErrorMessage<uint8_t>(PSTR("Alt.Set"), alt);
    +
    216 
    +
    217  bConfNum = conf;
    +
    218 
    +
    219  uint8_t index;
    +
    220 
    +
    221  if ((pep->bmAttributes & 0x03) == 3 && (pep->bEndpointAddress & 0x80) == 0x80)
    +
    222  index = epInterruptInIndex;
    +
    223  else
    +
    224  if ((pep->bmAttributes & 0x02) == 2)
    +
    225  index = ((pep->bEndpointAddress & 0x80) == 0x80) ? epDataInIndex : epDataOutIndex;
    +
    226  else
    +
    227  return;
    +
    228 
    +
    229  // Fill in the endpoint info structure
    +
    230  epInfo[index].epAddr = (pep->bEndpointAddress & 0x0F);
    +
    231  epInfo[index].maxPktSize = (uint8_t)pep->wMaxPacketSize;
    +
    232  //epInfo[index].epAttribs = 0;
    +
    233 
    +
    234  bNumEP ++;
    +
    235 
    +
    236  //PrintEndpointDescriptor(pep);
    +
    237 }
    +
    238 
    +
    239 uint8_t ACM::Release()
    +
    240 {
    + +
    242 
    +
    243  bControlIface = 0;
    +
    244  bDataIface = 0;
    +
    245  bNumEP = 1;
    +
    246 
    +
    247  bAddress = 0;
    +
    248  qNextPollTime = 0;
    +
    249  bPollEnable = false;
    +
    250  ready = false;
    +
    251  return 0;
    +
    252 }
    +
    253 
    +
    254 uint8_t ACM::Poll()
    +
    255 {
    +
    256  uint8_t rcode = 0;
    +
    257 
    +
    258  if (!bPollEnable)
    +
    259  return 0;
    +
    260 
    +
    261  //uint32_t time_now = millis();
    +
    262 
    +
    263  //if (qNextPollTime <= time_now)
    +
    264  //{
    +
    265  // qNextPollTime = time_now + 100;
    +
    266 
    +
    267  // uint8_t rcode;
    +
    268  // const uint8_t constBufSize = 16;
    +
    269  // uint8_t buf[constBufSize];
    +
    270 
    +
    271  // for (uint8_t i=0; i<constBufSize; i++)
    +
    272  // buf[i] = 0;
    +
    273 
    +
    274  // uint16_t read = (constBufSize > epInfo[epInterruptInIndex].maxPktSize)
    +
    275  // ? epInfo[epInterruptInIndex].maxPktSize : constBufSize;
    +
    276  // rcode = pUsb->inTransfer(bAddress, epInfo[epInterruptInIndex].epAddr, &read, buf);
    +
    277 
    +
    278  // if (rcode)
    +
    279  // return rcode;
    +
    280 
    +
    281  // for (uint8_t i=0; i<read; i++)
    +
    282  // {
    +
    283  // PrintHex<uint8_t>(buf[i]);
    +
    284  // Serial.print(" ");
    +
    285  // }
    +
    286  // USBTRACE("\r\n");
    +
    287  //}
    +
    288  return rcode;
    +
    289 }
    +
    290 
    +
    291 uint8_t ACM::RcvData(uint16_t *bytes_rcvd, uint8_t *dataptr)
    +
    292 {
    +
    293  return pUsb->inTransfer(bAddress, epInfo[epDataInIndex].epAddr, bytes_rcvd, dataptr);
    +
    294 }
    +
    295 
    +
    296 uint8_t ACM::SndData(uint16_t nbytes, uint8_t *dataptr)
    +
    297 {
    +
    298  return pUsb->outTransfer(bAddress, epInfo[epDataOutIndex].epAddr, nbytes, dataptr);
    +
    299 }
    +
    300 
    +
    301 /* untested */
    +
    302 uint8_t ACM::GetNotif( uint16_t *bytes_rcvd, uint8_t *dataptr )
    +
    303 {
    +
    304  return pUsb->inTransfer(bAddress, epInfo[epInterruptInIndex].epAddr, bytes_rcvd, dataptr);
    +
    305 }
    +
    306 
    +
    307 uint8_t ACM::SetCommFeature(uint16_t fid, uint8_t nbytes, uint8_t *dataptr)
    +
    308 {
    +
    309  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCOUT, CDC_SET_COMM_FEATURE, (fid & 0xff), (fid >> 8), bControlIface, nbytes, nbytes, dataptr, NULL ));
    +
    310 }
    +
    311 
    +
    312 uint8_t ACM::GetCommFeature(uint16_t fid, uint8_t nbytes, uint8_t *dataptr)
    +
    313 {
    +
    314  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCIN, CDC_GET_COMM_FEATURE, (fid & 0xff), (fid >> 8), bControlIface, nbytes, nbytes, dataptr, NULL ));
    +
    315 }
    +
    316 
    +
    317 uint8_t ACM::ClearCommFeature(uint16_t fid)
    +
    318 {
    +
    319  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCOUT, CDC_CLEAR_COMM_FEATURE, (fid & 0xff), (fid >> 8), bControlIface, 0, 0, NULL, NULL ));
    +
    320 }
    +
    321 
    +
    322 uint8_t ACM::SetLineCoding(const LINE_CODING *dataptr)
    +
    323 {
    +
    324  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCOUT, CDC_SET_LINE_CODING, 0x00, 0x00, bControlIface, sizeof(LINE_CODING), sizeof(LINE_CODING), (uint8_t*)dataptr, NULL ));
    +
    325 }
    +
    326 
    + +
    328 {
    +
    329  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCIN, CDC_GET_LINE_CODING, 0x00, 0x00, bControlIface, sizeof(LINE_CODING), sizeof(LINE_CODING), (uint8_t*)dataptr, NULL ));
    +
    330 }
    +
    331 
    +
    332 uint8_t ACM::SetControlLineState(uint8_t state)
    +
    333 {
    +
    334  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCOUT, CDC_SET_CONTROL_LINE_STATE, state, 0, bControlIface, 0, 0, NULL, NULL ));
    +
    335 }
    +
    336 
    +
    337 uint8_t ACM::SendBreak(uint16_t duration)
    +
    338 {
    +
    339  return( pUsb->ctrlReq( bAddress, 0, bmREQ_CDCOUT, CDC_SEND_BREAK, (duration & 0xff), (duration >> 8), bControlIface, 0, 0, NULL, NULL ));
    +
    340 }
    +
    341 
    +
    342 
    + +
    344 {
    +
    345  Notify(PSTR("Endpoint descriptor:"));
    +
    346  Notify(PSTR("\r\nLength:\t\t"));
    +
    347  PrintHex<uint8_t>(ep_ptr->bLength);
    +
    348  Notify(PSTR("\r\nType:\t\t"));
    +
    349  PrintHex<uint8_t>(ep_ptr->bDescriptorType);
    +
    350  Notify(PSTR("\r\nAddress:\t"));
    +
    351  PrintHex<uint8_t>(ep_ptr->bEndpointAddress);
    +
    352  Notify(PSTR("\r\nAttributes:\t"));
    +
    353  PrintHex<uint8_t>(ep_ptr->bmAttributes);
    +
    354  Notify(PSTR("\r\nMaxPktSize:\t"));
    +
    355  PrintHex<uint16_t>(ep_ptr->wMaxPacketSize);
    +
    356  Notify(PSTR("\r\nPoll Intrv:\t"));
    +
    357  PrintHex<uint8_t>(ep_ptr->bInterval);
    +
    358  Notify(PSTR("\r\n"));
    +
    359 }
    +
    + + + + diff --git a/cdcacm_8h.html b/cdcacm_8h.html index 7108955a..b746234c 100644 --- a/cdcacm_8h.html +++ b/cdcacm_8h.html @@ -265,6 +265,8 @@ Typedefs
    28 /* Uncomment the following if you are using a Teensy 2.0 */

    +

    Definition at line 160 of file cdcacm.h.

    +
    @@ -277,6 +279,8 @@ Typedefs
    +

    Definition at line 95 of file cdcacm.h.

    +
    @@ -289,6 +293,8 @@ Typedefs
    +

    Definition at line 41 of file cdcacm.h.

    +
    @@ -301,6 +307,8 @@ Typedefs
    +

    Definition at line 40 of file cdcacm.h.

    +
    @@ -313,6 +321,8 @@ Typedefs
    +

    Definition at line 98 of file cdcacm.h.

    +
    @@ -325,6 +335,8 @@ Typedefs
    +

    Definition at line 73 of file cdcacm.h.

    +
    @@ -337,6 +349,8 @@ Typedefs
    +

    Definition at line 90 of file cdcacm.h.

    +
    @@ -349,6 +363,8 @@ Typedefs
    +

    Definition at line 72 of file cdcacm.h.

    +
    @@ -361,6 +377,8 @@ Typedefs
    +

    Definition at line 68 of file cdcacm.h.

    +
    @@ -373,6 +391,8 @@ Typedefs
    +

    Definition at line 81 of file cdcacm.h.

    +
    @@ -385,6 +405,8 @@ Typedefs
    +

    Definition at line 89 of file cdcacm.h.

    +
    @@ -397,6 +419,8 @@ Typedefs
    +

    Definition at line 87 of file cdcacm.h.

    +
    @@ -409,6 +433,8 @@ Typedefs
    +

    Definition at line 85 of file cdcacm.h.

    +
    @@ -421,6 +447,8 @@ Typedefs
    +

    Definition at line 62 of file cdcacm.h.

    +
    @@ -433,6 +461,8 @@ Typedefs
    +

    Definition at line 63 of file cdcacm.h.

    +
    @@ -445,6 +475,8 @@ Typedefs
    +

    Definition at line 61 of file cdcacm.h.

    +
    @@ -457,6 +489,8 @@ Typedefs
    +

    Definition at line 58 of file cdcacm.h.

    +
    @@ -469,6 +503,8 @@ Typedefs
    +

    Definition at line 59 of file cdcacm.h.

    +
    @@ -481,6 +517,8 @@ Typedefs
    +

    Definition at line 60 of file cdcacm.h.

    +
    @@ -493,6 +531,8 @@ Typedefs
    +

    Definition at line 64 of file cdcacm.h.

    +
    @@ -505,6 +545,8 @@ Typedefs
    +

    Definition at line 76 of file cdcacm.h.

    +
    @@ -517,6 +559,8 @@ Typedefs
    +

    Definition at line 79 of file cdcacm.h.

    +
    @@ -529,6 +573,8 @@ Typedefs
    +

    Definition at line 83 of file cdcacm.h.

    +
    @@ -541,6 +587,8 @@ Typedefs
    +

    Definition at line 67 of file cdcacm.h.

    +
    @@ -553,6 +601,8 @@ Typedefs
    +

    Definition at line 77 of file cdcacm.h.

    +
    @@ -565,6 +615,8 @@ Typedefs
    +

    Definition at line 74 of file cdcacm.h.

    +
    @@ -577,6 +629,8 @@ Typedefs
    +

    Definition at line 71 of file cdcacm.h.

    +
    @@ -589,6 +643,8 @@ Typedefs
    +

    Definition at line 82 of file cdcacm.h.

    +
    @@ -601,6 +657,8 @@ Typedefs
    +

    Definition at line 75 of file cdcacm.h.

    +
    @@ -613,6 +671,8 @@ Typedefs
    +

    Definition at line 80 of file cdcacm.h.

    +
    @@ -625,6 +685,8 @@ Typedefs
    +

    Definition at line 88 of file cdcacm.h.

    +
    @@ -637,6 +699,8 @@ Typedefs
    +

    Definition at line 86 of file cdcacm.h.

    +
    @@ -649,6 +713,8 @@ Typedefs
    +

    Definition at line 78 of file cdcacm.h.

    +
    @@ -661,6 +727,8 @@ Typedefs
    +

    Definition at line 84 of file cdcacm.h.

    +
    @@ -673,6 +741,8 @@ Typedefs
    +

    Definition at line 45 of file cdcacm.h.

    +
    @@ -685,6 +755,8 @@ Typedefs
    +

    Definition at line 50 of file cdcacm.h.

    +
    @@ -697,6 +769,8 @@ Typedefs
    +

    Definition at line 48 of file cdcacm.h.

    +
    @@ -709,6 +783,8 @@ Typedefs
    +

    Definition at line 52 of file cdcacm.h.

    +
    @@ -721,6 +797,8 @@ Typedefs
    +

    Definition at line 44 of file cdcacm.h.

    +
    @@ -733,6 +811,8 @@ Typedefs
    +

    Definition at line 49 of file cdcacm.h.

    +
    @@ -745,6 +825,8 @@ Typedefs
    +

    Definition at line 55 of file cdcacm.h.

    +
    @@ -757,6 +839,8 @@ Typedefs
    +

    Definition at line 47 of file cdcacm.h.

    +
    @@ -769,6 +853,8 @@ Typedefs
    +

    Definition at line 53 of file cdcacm.h.

    +
    @@ -781,6 +867,8 @@ Typedefs
    +

    Definition at line 54 of file cdcacm.h.

    +
    @@ -793,6 +881,8 @@ Typedefs
    +

    Definition at line 46 of file cdcacm.h.

    +
    @@ -805,6 +895,8 @@ Typedefs
    +

    Definition at line 51 of file cdcacm.h.

    +
    @@ -817,6 +909,8 @@ Typedefs
    +

    Definition at line 100 of file cdcacm.h.

    +
    @@ -829,6 +923,8 @@ Typedefs
    +

    Definition at line 99 of file cdcacm.h.

    +
    @@ -841,6 +937,8 @@ Typedefs
    +

    Definition at line 93 of file cdcacm.h.

    +
    @@ -853,6 +951,8 @@ Typedefs
    +

    Definition at line 94 of file cdcacm.h.

    +
    @@ -865,6 +965,8 @@ Typedefs
    +

    Definition at line 96 of file cdcacm.h.

    +
    @@ -877,6 +979,8 @@ Typedefs
    +

    Definition at line 97 of file cdcacm.h.

    +

    Typedef Documentation

    @@ -920,7 +1024,7 @@ Typedefs diff --git a/cdcacm_8h_source.html b/cdcacm_8h_source.html index 330001a9..8b9f0f19 100644 --- a/cdcacm_8h_source.html +++ b/cdcacm_8h_source.html @@ -302,7 +302,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/cdcftdi_8cpp.html b/cdcftdi_8cpp.html index 31301ca9..462de7f4 100644 --- a/cdcftdi_8cpp.html +++ b/cdcftdi_8cpp.html @@ -96,10 +96,12 @@ Include dependency graph for cdcftdi.cpp: - + +

    Go to the source code of this file.

    + diff --git a/cdcftdi_8cpp_source.html b/cdcftdi_8cpp_source.html new file mode 100644 index 00000000..9a4ec604 --- /dev/null +++ b/cdcftdi_8cpp_source.html @@ -0,0 +1,447 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/cdcftdi.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    USB_Host_Shield_2.0 +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    cdcftdi.cpp
    +
    +
    +Go to the documentation of this file.
    1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
    +
    2 
    +
    3 This software may be distributed and modified under the terms of the GNU
    +
    4 General Public License version 2 (GPL2) as published by the Free Software
    +
    5 Foundation and appearing in the file GPL2.TXT included in the packaging of
    +
    6 this file. Please note that GPL2 Section 2[b] requires that all works based
    +
    7 on this software must also be made publicly available under the terms of
    +
    8 the GPL2 ("Copyleft").
    +
    9 
    +
    10 Contact information
    +
    11 -------------------
    +
    12 
    +
    13 Circuits At Home, LTD
    +
    14 Web : http://www.circuitsathome.com
    +
    15 e-mail : support@circuitsathome.com
    +
    16 */
    +
    17 #include "cdcftdi.h"
    +
    18 
    +
    19 const uint8_t FTDI::epDataInIndex = 1;
    +
    20 const uint8_t FTDI::epDataOutIndex = 2;
    +
    21 const uint8_t FTDI::epInterruptInIndex = 3;
    +
    22 
    + +
    24  pAsync(pasync),
    +
    25  pUsb(p),
    +
    26  bAddress(0),
    +
    27  bNumEP(1),
    +
    28  wFTDIType(0)
    +
    29 {
    +
    30  for(uint8_t i=0; i<FTDI_MAX_ENDPOINTS; i++)
    +
    31  {
    +
    32  epInfo[i].epAddr = 0;
    +
    33  epInfo[i].maxPktSize = (i) ? 0 : 8;
    +
    34  epInfo[i].epAttribs = 0;
    +
    35 
    +
    36  //if (!i)
    +
    37  epInfo[i].bmNakPower = USB_NAK_MAX_POWER;
    +
    38  }
    +
    39  if (pUsb)
    +
    40  pUsb->RegisterDeviceClass(this);
    +
    41 }
    +
    42 
    +
    43 uint8_t FTDI::Init(uint8_t parent, uint8_t port, bool lowspeed)
    +
    44 {
    +
    45  const uint8_t constBufSize = sizeof(USB_DEVICE_DESCRIPTOR);
    +
    46 
    +
    47  uint8_t buf[constBufSize];
    +
    48  uint8_t rcode;
    +
    49  UsbDevice *p = NULL;
    +
    50  EpInfo *oldep_ptr = NULL;
    +
    51  uint8_t len = 0;
    +
    52  uint16_t cd_len = 0;
    +
    53 
    +
    54  uint8_t num_of_conf; // number of configurations
    +
    55  uint8_t num_of_intf; // number of interfaces
    +
    56 
    +
    57  AddressPool &addrPool = pUsb->GetAddressPool();
    +
    58 
    +
    59  USBTRACE("FTDI Init\r\n");
    +
    60 
    +
    61  if (bAddress)
    + +
    63 
    +
    64  // Get pointer to pseudo device with address 0 assigned
    +
    65  p = addrPool.GetUsbDevicePtr(0);
    +
    66 
    +
    67  if (!p)
    + +
    69 
    +
    70  if (!p->epinfo)
    +
    71  {
    +
    72  USBTRACE("epinfo\r\n");
    + +
    74  }
    +
    75 
    +
    76  // Save old pointer to EP_RECORD of address 0
    +
    77  oldep_ptr = p->epinfo;
    +
    78 
    +
    79  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
    +
    80  p->epinfo = epInfo;
    +
    81 
    +
    82  p->lowspeed = lowspeed;
    +
    83 
    +
    84  // Get device descriptor
    +
    85  rcode = pUsb->getDevDescr( 0, 0, sizeof(USB_DEVICE_DESCRIPTOR), (uint8_t*)buf );
    +
    86 
    +
    87  // Restore p->epinfo
    +
    88  p->epinfo = oldep_ptr;
    +
    89 
    +
    90  if( rcode )
    +
    91  goto FailGetDevDescr;
    +
    92 
    +
    93  if (((USB_DEVICE_DESCRIPTOR*)buf)->idVendor != FTDI_VID || ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct != FTDI_PID)
    + +
    95 
    +
    96  // Save type of FTDI chip
    +
    97  wFTDIType = ((USB_DEVICE_DESCRIPTOR*)buf)->bcdDevice;
    +
    98 
    +
    99  // Allocate new address according to device class
    +
    100  bAddress = addrPool.AllocAddress(parent, false, port);
    +
    101 
    +
    102  if (!bAddress)
    + +
    104 
    +
    105  // Extract Max Packet Size from the device descriptor
    +
    106  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
    +
    107 
    +
    108  // Assign new address to the device
    +
    109  rcode = pUsb->setAddr( 0, 0, bAddress );
    +
    110 
    +
    111  if (rcode)
    +
    112  {
    +
    113  p->lowspeed = false;
    +
    114  addrPool.FreeAddress(bAddress);
    +
    115  bAddress = 0;
    +
    116  USBTRACE2("setAddr:",rcode);
    +
    117  return rcode;
    +
    118  }
    +
    119 
    +
    120  USBTRACE2("Addr:", bAddress);
    +
    121 
    +
    122  p->lowspeed = false;
    +
    123 
    +
    124  p = addrPool.GetUsbDevicePtr(bAddress);
    +
    125 
    +
    126  if (!p)
    + +
    128 
    +
    129  p->lowspeed = lowspeed;
    +
    130 
    +
    131  num_of_conf = ((USB_DEVICE_DESCRIPTOR*)buf)->bNumConfigurations;
    +
    132 
    +
    133  // Assign epInfo to epinfo pointer
    +
    134  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
    +
    135 
    +
    136  if (rcode)
    +
    137  goto FailSetDevTblEntry;
    +
    138 
    +
    139  USBTRACE2("NC:", num_of_conf);
    +
    140 
    +
    141  for (uint8_t i=0; i<num_of_conf; i++)
    +
    142  {
    + + +
    145 
    +
    146  rcode = pUsb->getConfDescr(bAddress, 0, i, &HexDump);
    +
    147  rcode = pUsb->getConfDescr(bAddress, 0, i, &confDescrParser);
    +
    148 
    +
    149  if (bNumEP > 1)
    +
    150  break;
    +
    151  } // for
    +
    152 
    +
    153  if (bNumEP < 2)
    + +
    155 
    +
    156  USBTRACE2("NumEP:", bNumEP);
    +
    157 
    +
    158  // Assign epInfo to epinfo pointer
    +
    159  rcode = pUsb->setEpInfoEntry(bAddress, bNumEP, epInfo);
    +
    160 
    +
    161  USBTRACE2("Conf:", bConfNum);
    +
    162 
    +
    163  // Set Configuration Value
    +
    164  rcode = pUsb->setConf(bAddress, 0, bConfNum);
    +
    165 
    +
    166  if (rcode)
    +
    167  goto FailSetConfDescr;
    +
    168 
    +
    169  rcode = pAsync->OnInit(this);
    +
    170 
    +
    171  if (rcode)
    +
    172  goto FailOnInit;
    +
    173 
    +
    174  USBTRACE("FTDI configured\r\n");
    +
    175 
    +
    176  bPollEnable = true;
    +
    177  return 0;
    +
    178 
    +
    179 FailGetDevDescr:
    +
    180  USBTRACE("getDevDescr:");
    +
    181  goto Fail;
    +
    182 
    +
    183 FailSetDevTblEntry:
    +
    184  USBTRACE("setDevTblEn:");
    +
    185  goto Fail;
    +
    186 
    +
    187 FailGetConfDescr:
    +
    188  USBTRACE("getConf:");
    +
    189  goto Fail;
    +
    190 
    +
    191 FailSetConfDescr:
    +
    192  USBTRACE("setConf:");
    +
    193  goto Fail;
    +
    194 
    +
    195 FailSetBaudRate:
    +
    196  USBTRACE("SetBaudRate:");
    +
    197  goto Fail;
    +
    198 
    +
    199 FailSetFlowControl:
    +
    200  USBTRACE("SetFlowControl:");
    +
    201  goto Fail;
    +
    202 
    +
    203 FailOnInit:
    +
    204  USBTRACE("OnInit:");
    +
    205  goto Fail;
    +
    206 
    +
    207 Fail:
    +
    208  Serial.println(rcode, HEX);
    +
    209  Release();
    +
    210  return rcode;
    +
    211 }
    +
    212 
    +
    213 
    +
    214 void FTDI::EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *pep)
    +
    215 {
    +
    216  ErrorMessage<uint8_t>(PSTR("Conf.Val"), conf);
    +
    217  ErrorMessage<uint8_t>(PSTR("Iface Num"),iface);
    +
    218  ErrorMessage<uint8_t>(PSTR("Alt.Set"), alt);
    +
    219 
    +
    220  bConfNum = conf;
    +
    221 
    +
    222  uint8_t index;
    +
    223 
    +
    224  if ((pep->bmAttributes & 0x03) == 3 && (pep->bEndpointAddress & 0x80) == 0x80)
    +
    225  index = epInterruptInIndex;
    +
    226  else
    +
    227  if ((pep->bmAttributes & 0x02) == 2)
    +
    228  index = ((pep->bEndpointAddress & 0x80) == 0x80) ? epDataInIndex : epDataOutIndex;
    +
    229  else
    +
    230  return;
    +
    231 
    +
    232  // Fill in the endpoint info structure
    +
    233  epInfo[index].epAddr = (pep->bEndpointAddress & 0x0F);
    +
    234  epInfo[index].maxPktSize = (uint8_t)pep->wMaxPacketSize;
    +
    235  //epInfo[index].epAttribs = 0;
    +
    236 
    +
    237  bNumEP ++;
    +
    238 
    +
    239  PrintEndpointDescriptor(pep);
    +
    240 }
    +
    241 
    +
    242 uint8_t FTDI::Release()
    +
    243 {
    +
    244  pUsb->GetAddressPool().FreeAddress(bAddress);
    +
    245 
    +
    246  bAddress = 0;
    +
    247  bNumEP = 1;
    +
    248  qNextPollTime = 0;
    +
    249  bPollEnable = false;
    +
    250  return 0;
    +
    251 }
    +
    252 
    +
    253 uint8_t FTDI::Poll()
    +
    254 {
    +
    255  uint8_t rcode = 0;
    +
    256 
    +
    257  //if (!bPollEnable)
    +
    258  // return 0;
    +
    259 
    +
    260  //if (qNextPollTime <= millis())
    +
    261  //{
    +
    262  // Serial.println(bAddress, HEX);
    +
    263 
    +
    264  // qNextPollTime = millis() + 100;
    +
    265  //}
    +
    266  return rcode;
    +
    267 }
    +
    268 
    +
    269 uint8_t FTDI::SetBaudRate(uint32_t baud)
    +
    270 {
    +
    271  uint16_t baud_value, baud_index = 0;
    +
    272  uint32_t divisor3;
    +
    273 
    +
    274  divisor3 = 48000000 / 2 / baud; // divisor shifted 3 bits to the left
    +
    275 
    +
    276  if (wFTDIType == FT232AM)
    +
    277  {
    +
    278  if ((divisor3 & 0x7) == 7)
    +
    279  divisor3 ++; // round x.7/8 up to x+1
    +
    280 
    +
    281  baud_value = divisor3 >> 3;
    +
    282  divisor3 &= 0x7;
    +
    283 
    +
    284  if (divisor3 == 1) baud_value |= 0xc000; else // 0.125
    +
    285  if (divisor3 >= 4) baud_value |= 0x4000; else // 0.5
    +
    286  if (divisor3 != 0) baud_value |= 0x8000; // 0.25
    +
    287  if (baud_value == 1) baud_value = 0; /* special case for maximum baud rate */
    +
    288  }
    +
    289  else
    +
    290  {
    +
    291  static const unsigned char divfrac [8] = { 0, 3, 2, 0, 1, 1, 2, 3 };
    +
    292  static const unsigned char divindex[8] = { 0, 0, 0, 1, 0, 1, 1, 1 };
    +
    293 
    +
    294  baud_value = divisor3 >> 3;
    +
    295  baud_value |= divfrac [divisor3 & 0x7] << 14;
    +
    296  baud_index = divindex[divisor3 & 0x7];
    +
    297 
    +
    298  /* Deal with special cases for highest baud rates. */
    +
    299  if (baud_value == 1) baud_value = 0; else // 1.0
    +
    300  if (baud_value == 0x4001) baud_value = 1; // 1.5
    +
    301  }
    +
    302  USBTRACE2("baud_value:", baud_value);
    +
    303  USBTRACE2("baud_index:", baud_index);
    +
    304  return pUsb->ctrlReq(bAddress, 0, bmREQ_FTDI_OUT, FTDI_SIO_SET_BAUD_RATE, baud_value & 0xff, baud_value >> 8, baud_index, 0, 0, NULL, NULL );
    +
    305 }
    +
    306 
    +
    307 uint8_t FTDI::SetModemControl(uint16_t signal)
    +
    308 {
    +
    309  return pUsb->ctrlReq(bAddress, 0, bmREQ_FTDI_OUT, FTDI_SIO_MODEM_CTRL, signal & 0xff, signal >> 8, 0, 0, 0, NULL, NULL);
    +
    310 }
    +
    311 
    +
    312 uint8_t FTDI::SetFlowControl(uint8_t protocol, uint8_t xon, uint8_t xoff)
    +
    313 {
    +
    314  return pUsb->ctrlReq(bAddress, 0, bmREQ_FTDI_OUT, FTDI_SIO_SET_FLOW_CTRL, xon, xoff, protocol << 8, 0, 0, NULL, NULL);
    +
    315 }
    +
    316 
    +
    317 uint8_t FTDI::SetData(uint16_t databm)
    +
    318 {
    +
    319  return pUsb->ctrlReq(bAddress, 0, bmREQ_FTDI_OUT, FTDI_SIO_SET_DATA, databm & 0xff, databm >> 8, 0, 0, 0, NULL, NULL);
    +
    320 }
    +
    321 
    +
    322 uint8_t FTDI::RcvData(uint16_t *bytes_rcvd, uint8_t *dataptr)
    +
    323 {
    +
    324  return pUsb->inTransfer(bAddress, epInfo[epDataInIndex].epAddr, bytes_rcvd, dataptr);
    +
    325 }
    +
    326 
    +
    327 uint8_t FTDI::SndData(uint16_t nbytes, uint8_t *dataptr)
    +
    328 {
    +
    329  return pUsb->outTransfer(bAddress, epInfo[epDataOutIndex].epAddr, nbytes, dataptr);
    +
    330 }
    +
    331 
    +
    332 void FTDI::PrintEndpointDescriptor( const USB_ENDPOINT_DESCRIPTOR* ep_ptr )
    +
    333 {
    +
    334  Notify(PSTR("Endpoint descriptor:"));
    +
    335  Notify(PSTR("\r\nLength:\t\t"));
    +
    336  PrintHex<uint8_t>(ep_ptr->bLength);
    +
    337  Notify(PSTR("\r\nType:\t\t"));
    +
    338  PrintHex<uint8_t>(ep_ptr->bDescriptorType);
    +
    339  Notify(PSTR("\r\nAddress:\t"));
    +
    340  PrintHex<uint8_t>(ep_ptr->bEndpointAddress);
    +
    341  Notify(PSTR("\r\nAttributes:\t"));
    +
    342  PrintHex<uint8_t>(ep_ptr->bmAttributes);
    +
    343  Notify(PSTR("\r\nMaxPktSize:\t"));
    +
    344  PrintHex<uint16_t>(ep_ptr->wMaxPacketSize);
    +
    345  Notify(PSTR("\r\nPoll Intrv:\t"));
    +
    346  PrintHex<uint8_t>(ep_ptr->bInterval);
    +
    347  Notify(PSTR("\r\n"));
    +
    348 }
    +
    + + + + diff --git a/cdcftdi_8h.html b/cdcftdi_8h.html index 34d2f489..4b6aa23d 100644 --- a/cdcftdi_8h.html +++ b/cdcftdi_8h.html @@ -227,6 +227,8 @@ Macros
    +

    Definition at line 41 of file cdcftdi.h.

    +
    @@ -239,6 +241,8 @@ Macros
    +

    Definition at line 40 of file cdcftdi.h.

    +
    @@ -251,6 +255,8 @@ Macros
    +

    Definition at line 51 of file cdcftdi.h.

    +
    @@ -263,6 +269,8 @@ Macros
    +

    Definition at line 49 of file cdcftdi.h.

    +
    @@ -275,6 +283,8 @@ Macros
    +

    Definition at line 50 of file cdcftdi.h.

    +
    @@ -287,6 +297,8 @@ Macros
    +

    Definition at line 52 of file cdcftdi.h.

    +
    @@ -299,6 +311,8 @@ Macros
    +

    Definition at line 106 of file cdcftdi.h.

    +
    @@ -311,6 +325,8 @@ Macros
    +

    Definition at line 47 of file cdcftdi.h.

    +
    @@ -323,6 +339,8 @@ Macros
    +

    Definition at line 90 of file cdcftdi.h.

    +
    @@ -335,6 +353,8 @@ Macros
    +

    Definition at line 85 of file cdcftdi.h.

    +
    @@ -347,6 +367,8 @@ Macros
    +

    Definition at line 91 of file cdcftdi.h.

    +
    @@ -359,6 +381,8 @@ Macros
    +

    Definition at line 87 of file cdcftdi.h.

    +
    @@ -371,6 +395,8 @@ Macros
    +

    Definition at line 60 of file cdcftdi.h.

    +
    @@ -383,6 +409,8 @@ Macros
    +

    Definition at line 56 of file cdcftdi.h.

    +
    @@ -395,6 +423,8 @@ Macros
    +

    Definition at line 55 of file cdcftdi.h.

    +
    @@ -407,6 +437,8 @@ Macros
    +

    Definition at line 65 of file cdcftdi.h.

    +
    @@ -419,6 +451,8 @@ Macros
    +

    Definition at line 66 of file cdcftdi.h.

    +
    @@ -431,6 +465,8 @@ Macros
    +

    Definition at line 64 of file cdcftdi.h.

    +
    @@ -443,6 +479,8 @@ Macros
    +

    Definition at line 92 of file cdcftdi.h.

    +
    @@ -455,6 +493,8 @@ Macros
    +

    Definition at line 93 of file cdcftdi.h.

    +
    @@ -467,6 +507,8 @@ Macros
    +

    Definition at line 86 of file cdcftdi.h.

    +
    @@ -479,6 +521,8 @@ Macros
    +

    Definition at line 58 of file cdcftdi.h.

    +
    @@ -491,6 +535,8 @@ Macros
    +

    Definition at line 76 of file cdcftdi.h.

    +
    @@ -503,6 +549,8 @@ Macros
    +

    Definition at line 59 of file cdcftdi.h.

    +
    @@ -515,6 +563,8 @@ Macros
    +

    Definition at line 70 of file cdcftdi.h.

    +
    @@ -527,6 +577,8 @@ Macros
    +

    Definition at line 71 of file cdcftdi.h.

    +
    @@ -539,6 +591,8 @@ Macros
    +

    Definition at line 68 of file cdcftdi.h.

    +
    @@ -551,6 +605,8 @@ Macros
    +

    Definition at line 69 of file cdcftdi.h.

    +
    @@ -563,6 +619,8 @@ Macros
    +

    Definition at line 72 of file cdcftdi.h.

    +
    @@ -575,6 +633,8 @@ Macros
    +

    Definition at line 73 of file cdcftdi.h.

    +
    @@ -587,6 +647,8 @@ Macros
    +

    Definition at line 74 of file cdcftdi.h.

    +
    @@ -599,6 +661,8 @@ Macros
    +

    Definition at line 75 of file cdcftdi.h.

    +
    @@ -611,6 +675,8 @@ Macros
    +

    Definition at line 79 of file cdcftdi.h.

    +
    @@ -623,6 +689,8 @@ Macros
    +

    Definition at line 80 of file cdcftdi.h.

    +
    @@ -635,6 +703,8 @@ Macros
    +

    Definition at line 78 of file cdcftdi.h.

    +
    @@ -647,6 +717,8 @@ Macros
    +

    Definition at line 62 of file cdcftdi.h.

    +
    @@ -659,6 +731,8 @@ Macros
    +

    Definition at line 61 of file cdcftdi.h.

    +
    @@ -671,6 +745,8 @@ Macros
    +

    Definition at line 57 of file cdcftdi.h.

    +
    @@ -683,6 +759,8 @@ Macros
    +

    Definition at line 82 of file cdcftdi.h.

    +
    @@ -695,6 +773,8 @@ Macros
    +

    Definition at line 83 of file cdcftdi.h.

    +
    @@ -707,6 +787,8 @@ Macros
    +

    Definition at line 81 of file cdcftdi.h.

    +
    @@ -719,6 +801,8 @@ Macros
    +

    Definition at line 88 of file cdcftdi.h.

    +
    @@ -731,12 +815,14 @@ Macros
    +

    Definition at line 46 of file cdcftdi.h.

    +
    diff --git a/cdcftdi_8h_source.html b/cdcftdi_8h_source.html index 1d91f661..c158ed84 100644 --- a/cdcftdi_8h_source.html +++ b/cdcftdi_8h_source.html @@ -241,7 +241,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/cdcprolific_8cpp.html b/cdcprolific_8cpp.html index 5c539b08..1db84a5a 100644 --- a/cdcprolific_8cpp.html +++ b/cdcprolific_8cpp.html @@ -96,10 +96,12 @@ Include dependency graph for cdcprolific.cpp: - + +

    Go to the source code of this file.

    + diff --git a/cdcprolific_8cpp_source.html b/cdcprolific_8cpp_source.html new file mode 100644 index 00000000..805b6e7c --- /dev/null +++ b/cdcprolific_8cpp_source.html @@ -0,0 +1,342 @@ + + + + + + +USB_Host_Shield_2.0: /Users/Lauszus/GitHub/USB_Host_Shield_2.0/cdcprolific.cpp Source File + + + + + + + + + +
    +
    + + + + + + +
    +
    USB_Host_Shield_2.0 +
    +
    +
    + + + + + + + + + +
    + +
    + + +
    +
    +
    +
    cdcprolific.cpp
    +
    +
    +Go to the documentation of this file.
    1 /* Copyright (C) 2011 Circuits At Home, LTD. All rights reserved.
    +
    2 
    +
    3 This software may be distributed and modified under the terms of the GNU
    +
    4 General Public License version 2 (GPL2) as published by the Free Software
    +
    5 Foundation and appearing in the file GPL2.TXT included in the packaging of
    +
    6 this file. Please note that GPL2 Section 2[b] requires that all works based
    +
    7 on this software must also be made publicly available under the terms of
    +
    8 the GPL2 ("Copyleft").
    +
    9 
    +
    10 Contact information
    +
    11 -------------------
    +
    12 
    +
    13 Circuits At Home, LTD
    +
    14 Web : http://www.circuitsathome.com
    +
    15 e-mail : support@circuitsathome.com
    +
    16 */
    +
    17 #include "cdcprolific.h"
    +
    18 
    + +
    20  ACM(p, pasync)
    +
    21  //wPLType(0)
    +
    22 {
    +
    23 }
    +
    24 
    +
    25 uint8_t PL2303::Init(uint8_t parent, uint8_t port, bool lowspeed)
    +
    26 {
    +
    27  const uint8_t constBufSize = sizeof(USB_DEVICE_DESCRIPTOR);
    +
    28 
    +
    29  uint8_t buf[constBufSize];
    +
    30  uint8_t rcode;
    +
    31  UsbDevice *p = NULL;
    +
    32  EpInfo *oldep_ptr = NULL;
    +
    33  uint8_t num_of_conf; // number of configurations
    +
    34  enum pl2303_type pltype = unknown;
    +
    35 
    +
    36  AddressPool &addrPool = pUsb->GetAddressPool();
    +
    37 
    +
    38  USBTRACE("PL Init\r\n");
    +
    39 
    +
    40  if (bAddress)
    + +
    42 
    +
    43  // Get pointer to pseudo device with address 0 assigned
    +
    44  p = addrPool.GetUsbDevicePtr(0);
    +
    45 
    +
    46  if (!p)
    + +
    48 
    +
    49  if (!p->epinfo)
    +
    50  {
    +
    51  USBTRACE("epinfo\r\n");
    + +
    53  }
    +
    54 
    +
    55  // Save old pointer to EP_RECORD of address 0
    +
    56  oldep_ptr = p->epinfo;
    +
    57 
    +
    58  // Temporary assign new pointer to epInfo to p->epinfo in order to avoid toggle inconsistence
    +
    59  p->epinfo = epInfo;
    +
    60 
    +
    61  p->lowspeed = lowspeed;
    +
    62 
    +
    63  // Get device descriptor
    +
    64  rcode = pUsb->getDevDescr( 0, 0, sizeof(USB_DEVICE_DESCRIPTOR), (uint8_t*)buf );
    +
    65 
    +
    66  // Restore p->epinfo
    +
    67  p->epinfo = oldep_ptr;
    +
    68 
    +
    69  if( rcode )
    +
    70  goto FailGetDevDescr;
    +
    71 
    +
    72  if (((USB_DEVICE_DESCRIPTOR*)buf)->idVendor != PL_VID && ((USB_DEVICE_DESCRIPTOR*)buf)->idProduct != PL_PID ) {
    + +
    74  }
    +
    75 
    +
    76  /* determine chip variant */
    +
    77 
    +
    78  if (((USB_DEVICE_DESCRIPTOR*)buf)->bDeviceClass == 0x02 ) {
    +
    79  pltype = type_0;
    +
    80  }
    +
    81  else if (((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0 == 0x40 ) {
    +
    82  pltype = rev_HX;
    +
    83  }
    +
    84  else if (((USB_DEVICE_DESCRIPTOR*)buf)->bDeviceClass == 0x00) {
    +
    85  pltype = type_1;
    +
    86  }
    +
    87  else if (((USB_DEVICE_DESCRIPTOR*)buf)->bDeviceClass == 0xff) {
    +
    88  pltype = type_1;
    +
    89  }
    +
    90 
    +
    91  // Allocate new address according to device class
    +
    92  bAddress = addrPool.AllocAddress(parent, false, port);
    +
    93 
    +
    94  if (!bAddress)
    + +
    96 
    +
    97  // Extract Max Packet Size from the device descriptor
    +
    98  epInfo[0].maxPktSize = (uint8_t)((USB_DEVICE_DESCRIPTOR*)buf)->bMaxPacketSize0;
    +
    99 
    +
    100  // Assign new address to the device
    +
    101  rcode = pUsb->setAddr( 0, 0, bAddress );
    +
    102 
    +
    103  if (rcode)
    +
    104  {
    +
    105  p->lowspeed = false;
    +
    106  addrPool.FreeAddress(bAddress);
    +
    107  bAddress = 0;
    +
    108  USBTRACE2("setAddr:",rcode);
    +
    109  return rcode;
    +
    110  }
    +
    111 
    +
    112  USBTRACE2("Addr:", bAddress);
    +
    113 
    +
    114  p->lowspeed = false;
    +
    115 
    +
    116  p = addrPool.GetUsbDevicePtr(bAddress);
    +
    117 
    +
    118  if (!p)
    + +
    120 
    +
    121  p->lowspeed = lowspeed;
    +
    122 
    +
    123  num_of_conf = ((USB_DEVICE_DESCRIPTOR*)buf)->bNumConfigurations;
    +
    124 
    +
    125  // Assign epInfo to epinfo pointer
    +
    126  rcode = pUsb->setEpInfoEntry(bAddress, 1, epInfo);
    +
    127 
    +
    128  if (rcode)
    +
    129  goto FailSetDevTblEntry;
    +
    130 
    +
    131  USBTRACE2("NC:", num_of_conf);
    +
    132 
    +
    133  for( uint8_t i=0; i<num_of_conf; i++ )
    +
    134  {
    +
    135  //HexDumper<USBReadParser, uint16_t, uint16_t> HexDump;
    + +
    137 
    +
    138  //rcode = pUsb->getConfDescr(bAddress, 0, i, &HexDump);
    +
    139  rcode = pUsb->getConfDescr(bAddress, 0, i, &confDescrParser);
    +
    140 
    +
    141  if (bNumEP > 1)
    +
    142  break;
    +
    143  } // for
    +
    144 
    +
    145  if ( bNumEP < 2 )
    + +
    147 
    +
    148  // Assign epInfo to epinfo pointer
    +
    149  rcode = pUsb->setEpInfoEntry( bAddress, bNumEP, epInfo );
    +
    150 
    +
    151  USBTRACE2("Conf:", bConfNum);
    +
    152 
    +
    153  // Set Configuration Value
    +
    154  rcode = pUsb->setConf(bAddress, 0, bConfNum);
    +
    155 
    +
    156  if (rcode)
    +
    157  goto FailSetConfDescr;
    +
    158 
    +
    159 #if defined(PL2303_COMPAT)
    +
    160  /* shamanic dance - sending Prolific init data as-is */
    +
    161  vendorRead( 0x84, 0x84, 0, buf );
    +
    162  vendorWrite( 0x04, 0x04, 0 );
    +
    163  vendorRead( 0x84, 0x84, 0, buf );
    +
    164  vendorRead( 0x83, 0x83, 0, buf );
    +
    165  vendorRead( 0x84, 0x84, 0, buf );
    +
    166  vendorWrite( 0x04, 0x04, 1 );
    +
    167  vendorRead( 0x84, 0x84, 0, buf);
    +
    168  vendorRead( 0x83, 0x83, 0, buf);
    +
    169  vendorWrite( 0, 0, 1 );
    +
    170  vendorWrite( 1, 0, 0 );
    +
    171  if ( pltype == rev_HX ) {
    +
    172  vendorWrite( 2, 0, 0x44 );
    +
    173  vendorWrite( 0x06, 0x06, 0 ); //from W7 init
    +
    174  }
    +
    175  else {
    +
    176  vendorWrite( 2, 0, 0x24 );
    +
    177  }
    +
    178  /* shamanic dance end */
    +
    179 #endif
    +
    180 
    +
    181  /* calling post-init callback */
    +
    182  rcode = pAsync->OnInit(this);
    +
    183 
    +
    184  if (rcode)
    +
    185  goto FailOnInit;
    +
    186 
    +
    187  USBTRACE("PL configured\r\n");
    +
    188 
    +
    189  //bPollEnable = true;
    +
    190  ready = true;
    +
    191  return 0;
    +
    192 
    +
    193 FailGetDevDescr:
    +
    194  USBTRACE("getDevDescr:");
    +
    195  goto Fail;
    +
    196 
    +
    197 FailSetDevTblEntry:
    +
    198  USBTRACE("setDevTblEn:");
    +
    199  goto Fail;
    +
    200 
    +
    201 FailGetConfDescr:
    +
    202  USBTRACE("getConf:");
    +
    203  goto Fail;
    +
    204 
    +
    205 FailSetConfDescr:
    +
    206  USBTRACE("setConf:");
    +
    207  goto Fail;
    +
    208 
    +
    209 FailSetControlLineState:
    +
    210  USBTRACE("SetControlLineState:");
    +
    211  goto Fail;
    +
    212 
    +
    213 FailSetLineCoding:
    +
    214  USBTRACE("SetLineCoding:");
    +
    215  goto Fail;
    +
    216 
    +
    217 FailOnInit:
    +
    218  USBTRACE("OnInit:");
    +
    219  goto Fail;
    +
    220 
    +
    221 Fail:
    +
    222  Serial.println(rcode, HEX);
    +
    223  Release();
    +
    224  return rcode;
    +
    225 }
    +
    226 
    +
    227 //uint8_t PL::Poll()
    +
    228 //{
    +
    229 // uint8_t rcode = 0;
    +
    230 //
    +
    231 // //if (!bPollEnable)
    +
    232 // // return 0;
    +
    233 //
    +
    234 // //if (qNextPollTime <= millis())
    +
    235 // //{
    +
    236 // // Serial.println(bAddress, HEX);
    +
    237 //
    +
    238 // // qNextPollTime = millis() + 100;
    +
    239 // //}
    +
    240 // return rcode;
    +
    241 //}
    +
    242 
    +
    243 
    +
    + + + + diff --git a/cdcprolific_8h.html b/cdcprolific_8h.html index a107dc77..be64d712 100644 --- a/cdcprolific_8h.html +++ b/cdcprolific_8h.html @@ -283,6 +283,8 @@ Enumerations
    +

    Definition at line 59 of file cdcprolific.h.

    +
    @@ -295,6 +297,8 @@ Enumerations
    +

    Definition at line 60 of file cdcprolific.h.

    +
    @@ -307,6 +311,8 @@ Enumerations
    +

    Definition at line 67 of file cdcprolific.h.

    +
    @@ -319,6 +325,8 @@ Enumerations
    +

    Definition at line 110 of file cdcprolific.h.

    +
    @@ -331,6 +339,8 @@ Enumerations
    +

    Definition at line 111 of file cdcprolific.h.

    +
    @@ -343,6 +353,8 @@ Enumerations
    +

    Definition at line 112 of file cdcprolific.h.

    +
    @@ -355,6 +367,8 @@ Enumerations
    +

    Definition at line 116 of file cdcprolific.h.

    +
    @@ -367,6 +381,8 @@ Enumerations
    +

    Definition at line 117 of file cdcprolific.h.

    +
    @@ -379,6 +395,8 @@ Enumerations
    +

    Definition at line 121 of file cdcprolific.h.

    +
    @@ -391,6 +409,8 @@ Enumerations
    +

    Definition at line 122 of file cdcprolific.h.

    +
    @@ -403,6 +423,8 @@ Enumerations
    +

    Definition at line 63 of file cdcprolific.h.

    +
    @@ -415,6 +437,8 @@ Enumerations
    +

    Definition at line 64 of file cdcprolific.h.

    +
    @@ -427,6 +451,8 @@ Enumerations
    +

    Definition at line 65 of file cdcprolific.h.

    +
    @@ -439,6 +465,8 @@ Enumerations
    +

    Definition at line 61 of file cdcprolific.h.

    +
    @@ -451,6 +479,8 @@ Enumerations
    +

    Definition at line 57 of file cdcprolific.h.

    +
    @@ -463,6 +493,8 @@ Enumerations
    +

    Definition at line 58 of file cdcprolific.h.

    +
    @@ -475,6 +507,8 @@ Enumerations
    +

    Definition at line 109 of file cdcprolific.h.

    +
    @@ -487,6 +521,8 @@ Enumerations
    +

    Definition at line 115 of file cdcprolific.h.

    +
    @@ -499,6 +535,8 @@ Enumerations
    +

    Definition at line 120 of file cdcprolific.h.

    +
    @@ -511,6 +549,8 @@ Enumerations
    +

    Definition at line 62 of file cdcprolific.h.

    +
    @@ -523,6 +563,8 @@ Enumerations
    +

    Definition at line 90 of file cdcprolific.h.

    +
    @@ -535,6 +577,8 @@ Enumerations
    +

    Definition at line 76 of file cdcprolific.h.

    +
    @@ -547,6 +591,8 @@ Enumerations
    +

    Definition at line 77 of file cdcprolific.h.

    +
    @@ -559,6 +605,8 @@ Enumerations
    +

    Definition at line 72 of file cdcprolific.h.

    +
    @@ -571,6 +619,8 @@ Enumerations
    +

    Definition at line 95 of file cdcprolific.h.

    +
    @@ -583,6 +633,8 @@ Enumerations
    +

    Definition at line 98 of file cdcprolific.h.

    +
    @@ -595,6 +647,8 @@ Enumerations
    +

    Definition at line 96 of file cdcprolific.h.

    +
    @@ -607,6 +661,8 @@ Enumerations
    +

    Definition at line 91 of file cdcprolific.h.

    +
    @@ -619,6 +675,8 @@ Enumerations
    +

    Definition at line 99 of file cdcprolific.h.

    +
    @@ -631,6 +689,8 @@ Enumerations
    +

    Definition at line 93 of file cdcprolific.h.

    +
    @@ -643,6 +703,8 @@ Enumerations
    +

    Definition at line 92 of file cdcprolific.h.

    +
    @@ -655,6 +717,8 @@ Enumerations
    +

    Definition at line 97 of file cdcprolific.h.

    +
    @@ -667,6 +731,8 @@ Enumerations
    +

    Definition at line 70 of file cdcprolific.h.

    +
    @@ -679,6 +745,8 @@ Enumerations
    +

    Definition at line 73 of file cdcprolific.h.

    +
    @@ -691,6 +759,8 @@ Enumerations
    +

    Definition at line 89 of file cdcprolific.h.

    +
    @@ -703,6 +773,8 @@ Enumerations
    +

    Definition at line 71 of file cdcprolific.h.

    +
    @@ -715,6 +787,8 @@ Enumerations
    +

    Definition at line 74 of file cdcprolific.h.

    +
    @@ -727,6 +801,8 @@ Enumerations
    +

    Definition at line 52 of file cdcprolific.h.

    +
    @@ -739,6 +815,8 @@ Enumerations
    +

    Definition at line 51 of file cdcprolific.h.

    +
    @@ -751,6 +829,8 @@ Enumerations
    +

    Definition at line 68 of file cdcprolific.h.

    +
    @@ -763,6 +843,8 @@ Enumerations
    +

    Definition at line 139 of file cdcprolific.h.

    +
    @@ -775,6 +857,8 @@ Enumerations
    +

    Definition at line 44 of file cdcprolific.h.

    +
    @@ -787,6 +871,8 @@ Enumerations
    +

    Definition at line 43 of file cdcprolific.h.

    +
    @@ -799,6 +885,8 @@ Enumerations
    +

    Definition at line 49 of file cdcprolific.h.

    +
    @@ -811,6 +899,8 @@ Enumerations
    +

    Definition at line 46 of file cdcprolific.h.

    +
    @@ -823,6 +913,8 @@ Enumerations
    +

    Definition at line 48 of file cdcprolific.h.

    +
    @@ -835,6 +927,8 @@ Enumerations
    +

    Definition at line 47 of file cdcprolific.h.

    +
    @@ -847,6 +941,8 @@ Enumerations
    +

    Definition at line 125 of file cdcprolific.h.

    +
    @@ -859,6 +955,8 @@ Enumerations
    +

    Definition at line 126 of file cdcprolific.h.

    +
    @@ -871,6 +969,8 @@ Enumerations
    +

    Definition at line 108 of file cdcprolific.h.

    +
    @@ -883,6 +983,8 @@ Enumerations
    +

    Definition at line 114 of file cdcprolific.h.

    +
    @@ -895,6 +997,8 @@ Enumerations
    +

    Definition at line 119 of file cdcprolific.h.

    +
    @@ -907,6 +1011,8 @@ Enumerations
    +

    Definition at line 55 of file cdcprolific.h.

    +
    @@ -919,6 +1025,8 @@ Enumerations
    +

    Definition at line 54 of file cdcprolific.h.

    +
    @@ -931,6 +1039,8 @@ Enumerations
    +

    Definition at line 56 of file cdcprolific.h.

    +
    @@ -943,6 +1053,8 @@ Enumerations
    +

    Definition at line 105 of file cdcprolific.h.

    +
    @@ -955,6 +1067,8 @@ Enumerations
    +

    Definition at line 104 of file cdcprolific.h.

    +
    @@ -967,6 +1081,8 @@ Enumerations
    +

    Definition at line 102 of file cdcprolific.h.

    +
    @@ -979,6 +1095,8 @@ Enumerations
    +

    Definition at line 101 of file cdcprolific.h.

    +

    Enumeration Type Documentation

    @@ -1006,6 +1124,8 @@ Enumerations +

    Definition at line 128 of file cdcprolific.h.

    + @@ -1030,12 +1150,14 @@ Enumerations +

    Definition at line 80 of file cdcprolific.h.

    + diff --git a/cdcprolific_8h_source.html b/cdcprolific_8h_source.html index b0dd95cb..d56798d3 100644 --- a/cdcprolific_8h_source.html +++ b/cdcprolific_8h_source.html @@ -269,7 +269,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/class_a_c_m-members.html b/class_a_c_m-members.html index a62dc628..66b05f81 100644 --- a/class_a_c_m-members.html +++ b/class_a_c_m-members.html @@ -124,7 +124,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/class_a_c_m.html b/class_a_c_m.html index a75a0199..2db80ebd 100644 --- a/class_a_c_m.html +++ b/class_a_c_m.html @@ -185,7 +185,10 @@ Static Protected Attributes static const uint8_t epInterruptInIndex = 3   -

    Constructor & Destructor Documentation

    +

    Detailed Description

    +
    +

    Definition at line 162 of file cdcacm.h.

    +

    Constructor & Destructor Documentation

    @@ -210,6 +213,8 @@ Static Protected Attributes
    +

    Definition at line 23 of file cdcacm.cpp.

    +

    Member Function Documentation

    @@ -227,6 +232,8 @@ Static Protected Attributes
    +

    Definition at line 317 of file cdcacm.cpp.

    +
    @@ -281,6 +288,8 @@ Static Protected Attributes

    Implements UsbConfigXtracter.

    +

    Definition at line 211 of file cdcacm.cpp.

    + @@ -306,6 +315,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 204 of file cdcacm.h.

    + @@ -338,6 +349,8 @@ Static Protected Attributes
    +

    Definition at line 312 of file cdcacm.cpp.

    +
    @@ -354,6 +367,8 @@ Static Protected Attributes
    +

    Definition at line 327 of file cdcacm.cpp.

    +
    @@ -380,6 +395,8 @@ Static Protected Attributes
    +

    Definition at line 302 of file cdcacm.cpp.

    +
    @@ -424,6 +441,8 @@ Static Protected Attributes

    Reimplemented in PL2303.

    +

    Definition at line 50 of file cdcacm.cpp.

    + @@ -447,6 +466,8 @@ Static Protected Attributes
    +

    Definition at line 205 of file cdcacm.h.

    +
    @@ -472,6 +493,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 254 of file cdcacm.cpp.

    + @@ -496,6 +519,8 @@ Static Protected Attributes
    +

    Definition at line 343 of file cdcacm.cpp.

    +
    @@ -522,6 +547,8 @@ Static Protected Attributes
    +

    Definition at line 291 of file cdcacm.cpp.

    +
    @@ -547,6 +574,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 239 of file cdcacm.cpp.

    + @@ -563,6 +592,8 @@ Static Protected Attributes
    +

    Definition at line 337 of file cdcacm.cpp.

    +
    @@ -595,6 +626,8 @@ Static Protected Attributes
    +

    Definition at line 307 of file cdcacm.cpp.

    +
    @@ -611,6 +644,8 @@ Static Protected Attributes
    +

    Definition at line 332 of file cdcacm.cpp.

    +
    @@ -627,6 +662,8 @@ Static Protected Attributes
    +

    Definition at line 322 of file cdcacm.cpp.

    +
    @@ -653,6 +690,8 @@ Static Protected Attributes
    +

    Definition at line 296 of file cdcacm.cpp.

    +

    Member Data Documentation

    @@ -674,6 +713,8 @@ Static Protected Attributes
    +

    Definition at line 171 of file cdcacm.h.

    +
    @@ -694,6 +735,8 @@ Static Protected Attributes
    +

    Definition at line 172 of file cdcacm.h.

    +
    @@ -714,6 +757,8 @@ Static Protected Attributes
    +

    Definition at line 173 of file cdcacm.h.

    +
    @@ -734,6 +779,8 @@ Static Protected Attributes
    +

    Definition at line 174 of file cdcacm.h.

    +
    @@ -754,6 +801,8 @@ Static Protected Attributes
    +

    Definition at line 175 of file cdcacm.h.

    +
    @@ -774,6 +823,8 @@ Static Protected Attributes
    +

    Definition at line 177 of file cdcacm.h.

    +
    @@ -794,6 +845,8 @@ Static Protected Attributes
    +

    Definition at line 165 of file cdcacm.h.

    +
    @@ -814,6 +867,8 @@ Static Protected Attributes
    +

    Definition at line 166 of file cdcacm.h.

    +
    @@ -834,6 +889,8 @@ Static Protected Attributes
    +

    Definition at line 180 of file cdcacm.h.

    +
    @@ -854,6 +911,8 @@ Static Protected Attributes
    +

    Definition at line 167 of file cdcacm.h.

    +
    @@ -874,6 +933,8 @@ Static Protected Attributes
    +

    Definition at line 170 of file cdcacm.h.

    +
    @@ -894,6 +955,8 @@ Static Protected Attributes
    +

    Definition at line 169 of file cdcacm.h.

    +
    @@ -914,6 +977,8 @@ Static Protected Attributes
    +

    Definition at line 176 of file cdcacm.h.

    +
    @@ -934,16 +999,18 @@ Static Protected Attributes
    +

    Definition at line 178 of file cdcacm.h.

    +

    The documentation for this class was generated from the following files:
    • /Users/Lauszus/GitHub/USB_Host_Shield_2.0/cdcacm.h
    • -
    • /Users/Lauszus/GitHub/USB_Host_Shield_2.0/cdcacm.cpp
    • +
    • /Users/Lauszus/GitHub/USB_Host_Shield_2.0/cdcacm.cpp
    diff --git a/class_a_d_k-members.html b/class_a_d_k-members.html index 10d8cb9d..15856345 100644 --- a/class_a_d_k-members.html +++ b/class_a_d_k-members.html @@ -110,7 +110,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/class_a_d_k.html b/class_a_d_k.html index 897cf504..2cacbc28 100644 --- a/class_a_d_k.html +++ b/class_a_d_k.html @@ -157,7 +157,10 @@ Static Protected Attributes static const uint8_t epDataOutIndex = 2   -

    Constructor & Destructor Documentation

    +

    Detailed Description

    +
    +

    Definition at line 71 of file adk.h.

    +

    Constructor & Destructor Documentation

    @@ -212,6 +215,8 @@ Static Protected Attributes
    +

    Definition at line 25 of file adk.cpp.

    +

    Member Function Documentation

    @@ -267,6 +272,8 @@ Static Protected Attributes

    Implements UsbConfigXtracter.

    +

    Definition at line 287 of file adk.cpp.

    + @@ -292,6 +299,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 121 of file adk.h.

    + @@ -334,6 +343,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 62 of file adk.cpp.

    + @@ -357,6 +368,8 @@ Static Protected Attributes
    +

    Definition at line 122 of file adk.h.

    +
    @@ -382,6 +395,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 120 of file adk.h.

    + @@ -406,6 +421,8 @@ Static Protected Attributes
    +

    Definition at line 339 of file adk.cpp.

    +
    @@ -432,6 +449,8 @@ Static Protected Attributes
    +

    Definition at line 327 of file adk.cpp.

    +
    @@ -457,6 +476,8 @@ Static Protected Attributes

    Implements USBDeviceConfig.

    +

    Definition at line 316 of file adk.cpp.

    + @@ -483,6 +504,8 @@ Static Protected Attributes
    +

    Definition at line 334 of file adk.cpp.

    +

    Member Data Documentation

    @@ -504,6 +527,8 @@ Static Protected Attributes
    +

    Definition at line 93 of file adk.h.

    +
    @@ -524,6 +549,8 @@ Static Protected Attributes
    +

    Definition at line 94 of file adk.h.

    +
    @@ -544,6 +571,8 @@ Static Protected Attributes
    +

    Definition at line 96 of file adk.h.

    +
    @@ -564,6 +593,8 @@ Static Protected Attributes
    +

    Definition at line 88 of file adk.h.

    +
    @@ -584,6 +615,8 @@ Static Protected Attributes
    +

    Definition at line 89 of file adk.h.

    +
    @@ -604,6 +637,8 @@ Static Protected Attributes
    +

    Definition at line 100 of file adk.h.

    +
    @@ -624,6 +659,8 @@ Static Protected Attributes
    +

    Definition at line 92 of file adk.h.

    +
    @@ -644,16 +681,18 @@ Static Protected Attributes
    +

    Definition at line 97 of file adk.h.

    +

    The documentation for this class was generated from the following files:
    • /Users/Lauszus/GitHub/USB_Host_Shield_2.0/adk.h
    • -
    • /Users/Lauszus/GitHub/USB_Host_Shield_2.0/adk.cpp
    • +
    • /Users/Lauszus/GitHub/USB_Host_Shield_2.0/adk.cpp
    diff --git a/class_address_pool-members.html b/class_address_pool-members.html index 1419fd62..dcd03e87 100644 --- a/class_address_pool-members.html +++ b/class_address_pool-members.html @@ -95,7 +95,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search'); diff --git a/class_address_pool.html b/class_address_pool.html index a7e0b92b..8f75ebcc 100644 --- a/class_address_pool.html +++ b/class_address_pool.html @@ -108,7 +108,10 @@ Public Member Functions virtual void FreeAddress (uint8_t addr)=0   -

    Member Function Documentation

    +

    Detailed Description

    +
    +

    Definition at line 87 of file address.h.

    +

    Member Function Documentation

    @@ -209,7 +212,7 @@ Public Member Functions
    diff --git a/class_address_pool_impl-members.html b/class_address_pool_impl-members.html index 607b75ca..cc424128 100644 --- a/class_address_pool_impl-members.html +++ b/class_address_pool_impl-members.html @@ -97,7 +97,7 @@ var searchBox = new SearchBox("searchBox", "search",false,'Search');
    diff --git a/class_address_pool_impl.html b/class_address_pool_impl.html index e9e2841c..e917f36d 100644 --- a/class_address_pool_impl.html +++ b/class_address_pool_impl.html @@ -119,7 +119,13 @@ Public Member Functions virtual void FreeAddress (uint8_t addr)   -

    Constructor & Destructor Documentation

    +

    Detailed Description

    +

    template<const uint8_t MAX_DEVICES_ALLOWED>
    +class AddressPoolImpl< MAX_DEVICES_ALLOWED >

    + + +

    Definition at line 101 of file address.h.

    +

    Constructor & Destructor Documentation

    @@ -143,6 +149,8 @@ template<const uint8_t MAX_DEVICES_ALLOWED>
    +

    Definition at line 167 of file address.h.

    +

    Member Function Documentation

    @@ -188,6 +196,8 @@ template<const uint8_t MAX_DEVICES_ALLOWED>

    Implements AddressPool.

    +

    Definition at line 203 of file address.h.

    + @@ -214,6 +224,8 @@ template<const uint8_t MAX_DEVICES_ALLOWED>
    +

    Definition at line 193 of file address.h.

    +
    @@ -242,6 +254,8 @@ template<const uint8_t MAX_DEVICES_ALLOWED>

    Implements AddressPool.

    +

    Definition at line 259 of file address.h.

    + @@ -270,6 +284,8 @@ template<const uint8_t MAX_DEVICES_ALLOWED>

    Implements AddressPool.

    +

    Definition at line 182 of file address.h.

    +
    The documentation for this class was generated from the following file: