Android рдкрд░ USB рдХрд╕реНрдЯрдо рдЫрд┐рдкрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛

Freepik рджреНрд╡рд╛рд░рд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛
рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдзреБрдирд┐рдХ рдПрдВрдбреНрд░реЙрдЗрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдмреНрд▓реВрдЯреВрде рдЬреИрд╕реЗ рд╡рд╛рдпрд░рд▓реЗрд╕ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЬрдм рдХреБрдЫ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рд╡рд╛рдпрд░рд▓реЗрд╕ рдЪрд╛рд░реНрдЬрд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдФрд░ рдмрд╛рд╣реНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд╛рдпрд░реНрдб рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдРрд╕реА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ USB рддреБрд░рдВрдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖ рдЬрд╛рддрд╛ рд╣реИред

рдЪрд▓рд┐рдП рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдорд╛рдорд▓рд╛ рдЕрдкрдиреЗ рд╕рд╛рде рд▓реЗрддреЗ рд╣реИрдВред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрддрд╛ рд╣реИ рдФрд░ рдХрд╣рддрд╛ рд╣реИ: тАЬрдореБрдЭреЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ BUT рд╣реИ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдПрдВрдбреНрд░реЙрдЗрдб рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХ рдПрдХрд▓-рдмреЛрд░реНрдб рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкрд░рд┐рдзреАрдп рдбрд┐рд╡рд╛рдЗрд╕ "рдХреЙрд▓" рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдпрд╣ рд╢рд╛рдирджрд╛рд░ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрднреА-рдХрднреА рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ USB рд╕реНрдЯреИрдХ рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЧрд╣рд░реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдирд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓реЗрдЦ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдВрдбреНрд░реЙрдЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдпреВрдПрд╕рдмреА рдХрд╕реНрдЯрдо рдЫрд┐рдкрд╛рдИ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкрд░рд┐рдзреАрдп рдЙрдкрдХрд░рдг рдХреЛ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди (HOST) рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдкрд░рд┐рдзреАрдп рдбрд┐рд╡рд╛рдЗрд╕ (DEVICE) рдкрд░ рдПрд▓рдИрдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдмрдЯрди (рдкреНрд░реЗрд╕) рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдореИрдВ рдкрд░рд┐рдзреАрдп рдмреЛрд░реНрдб рдХреЗ рд▓рд┐рдП рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛, рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреЗрдВред

рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рд┐рджреНрдзрд╛рдВрддред рдЬрд┐рддрдирд╛ рдХрдо рд╣реЛ рд╕рдХреЗ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдереЛрдбрд╝рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЫреЛрдЯрд╛ред рдпрд╣ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдиреНрдпреВрдирддрдо рд╣реИ, рдХреЛрдб рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

рдкрд░рд┐рдзреАрдп рдЙрдкрдХрд░рдг рдкрд░ USB рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рднрд┐рдиреНрди рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, USB HID, USB рдорд╛рд╕ рд╕реНрдЯреНрд░реЙрдЧ рдпрд╛ USB CDC) рдЕрдкрдиреЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдХреБрдЫ рдореЗрдВ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВ - рд╡рд┐рд╢реЗрд╖ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреНрд▓рд┐рдкрдмреЛрд░реНрдбред

рдореЗрд░реЗ рдкрд░рд┐рдзреАрдп рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рджреЛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо рдЫрд┐рдкрд╛рдИ рд╣реИ, рдПрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рд╕рдВрдЪрд╛рд░рдг рдХреЗ рд▓рд┐рдПред рдЖрдорддреМрд░ рдкрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдореМрдЬреВрдж рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЬрд╛рдирдХрд╛рд░реА рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП USBlyzerред

USB HID рдореЗрдВ рдЙрдкрдХрд░рдг рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рд░рд┐рдкреЛрд░реНрдЯ рдХреНрдпрд╛ рд╣реИрдВ? рдЪреВрдВрдХрд┐ рдбреЗрдЯрд╛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдФрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рди рдХреЗрд╡рд▓ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдбреЗрдЯрд╛ рдмрд╛рдЗрдЯреНрд╕ рдлреЗрдВрдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рд▓реЗ рдкреИрдХреЗрдЯ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд┐рдкреЛрд░реНрдЯ рд╡рд┐рд╡рд░рдгрдХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рдо рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рд╕рдВрд░рдЪрдирд╛, рдЖрдХрд╛рд░ рдФрд░ рд╕рдВрдЪрд░рдг рдХреА рдЖрд╡реГрддреНрддрд┐ рдореЗрдВ рдХреБрдЫ рдбреЗрдЯрд╛ рд╣реИред рдкреИрдХреЗрдЯ рдХреА рдкрд╣рдЪрд╛рди рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдИрдбреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдЯрди рдХреА рд╕реНрдерд┐рддрд┐ рдЖрдИрдбреА = 1 рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рдФрд░ рд╣рдо рдЖрдИрдбреА = 2 рдХреЗ рд╕рд╛рде рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд▓рдИрдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд▓реЛрд╣реЗ рд╕реЗ рджреВрд░, Android рдХреЗ рдХрд░реАрдм


рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ, рдпреВрдПрд╕рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдПрдкреАрдЖрдИ рд╕рдВрд╕реНрдХрд░рдг 12 (рдПрдВрдбреНрд░реЙрдЗрдб 3.1) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖред рдкрд░рд┐рдзреАрдп рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпреВрдПрд╕рдмреА рдбрд┐рд╡рд╛рдЗрд╕ рдореЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред USB рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ USB рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдкреВрд░реА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рдмреАрдЪ, рдЕрдкрдиреЗ рдХрдиреЗрдХреНрдЯреЗрдб рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкрд╣рдЪрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред USB рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдкрд╣рдЪрд╛рди vid (рд╡рд┐рдХреНрд░реЗрддрд╛ рдЖрдИрдбреА) рдФрд░ pid (рдЙрддреНрдкрд╛рдж рдЖрдИрдбреА) рдХреЗ рд╕рдВрдпреЛрдЬрди рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред Xml рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде device_filter.xml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

<resources> <usb-device vendor-id="1155" product-id="22352" /> </resources> 

рдЕрдм рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрдорддрд┐ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ (рдпрджрд┐ рдЖрдкрдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 <uses-permission android:name="android.permission.USB_PERMISSION" /> <uses-feature android:name="android.hardware.usb.host" /> <activity android:name=".MainActivity"> <intent-ilter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" /> </activity> 

Android рдореЗрдВ: рд╕рдВрд╕рд╛рдзрди рд╣рдо рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдЖрдк рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд░рд╛рджреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдЕрд╕рд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ UsbManager рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдХрд░рдг, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдЦреЛрдЬреЗрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЗрд╕реЗ рд╣рд░ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

 val usbManager = context.getSystemService(Context.USB_SERVICE) as UsbManager private var usbConnection: UsbDeviceConnection? = null private var usbInterface: UsbInterface? = null private var usbRequest: UsbRequest? = null private var usbInEndpoint: UsbEndpoint? = null private var usbOutEndpoint: UsbEndpoint? = null fun enumerate(): Boolean { val deviceList = usbManager.deviceList for (device in deviceList.values) { /*      VID  PID */ if ((device.vendorId == VENDOR_ID) and (device.productId == PRODUCT_ID)) { /*      */ usbInterface = device.getInterface(CUSTOM_HID_INTERFACE) /*            */ for (idx in 0 until usbInterface!!.endpointCount) { if (usbInterface?.getEndpoint(idx)?.direction == USB_DIR_IN) usbInEndpoint = usbInterface?.getEndpoint(idx) else usbOutEndpoint = usbInterface?.getEndpoint(idx) } usbConnection = usbManager.openDevice(device) usbConnection?.claimInterface(usbInterface, true) usbRequest = UsbRequest() usbRequest?.initialize(usbConnection, usbInEndpoint) } } /*    */ return usbConnection != null } 

рдпрд╣рд╛рдВ рд╣рдо рдмрд╣реБрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рджреЗрдЦрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереАред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирдВрдмрд░ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЛрдиреЛрдВ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдХ рдпреВрдПрд╕рдмреА рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рдЗрддрдирд╛ рд╣реА, рдЕрдм рдЖрдк рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдбрд┐рд╡рд╛рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред

  fun sendReport(data: ByteArray) { usbConnection?.bulkTransfer(usbOutEndpoint, data, data.size, 0) } fun getReport(): ByteArray { val buffer = ByteBuffer.allocate(REPORT_SIZE) val report = ByteArray(buffer.remaining()) if (usbRequest.queue(buffer, REPORT_SIZE)) { usbConnection?.requestWait() buffer.rewind() buffer.get(report, 0, report.size) buffer.clear() } return report } 

рд╣рдо SendReport рд╡рд┐рдзрд┐ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдИрдбреА рд╣реИ, рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдпреВрдПрд╕рдмреА рдХрдиреЗрдХреНрд╢рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд░рддреЗ рд╣реИрдВред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕рдВрдЦреНрдпрд╛, рдбреЗрдЯрд╛, рдЙрдирдХреЗ рдЖрдХрд╛рд░ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдмрд▓реНрдХрдЯреНрд░рд╛рдВрд╕рдлрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ UsbDeviceConnection рдХреНрд▓рд╛рд╕ рдореЗрдВ USB рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ - рдмрд▓реНрдХ рдЯреНрд░рд╛рдиреНрд╕рдлрд╝рд░ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рд╡рд┐рдзрд┐рдпрд╛рдБред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдмрд▓реНрдХ рдЯреНрд░рд╛рдиреНрд╕рдлреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрд┐рдкрд╛рдИ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╕реНрдЯрдо рдЫрд┐рдкрд╛рдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╣реА рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдкрдврд╝реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рд╕рд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред

рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдХреИрд╕реЗ рдкрддрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдпреВрдПрд╕рдмреА рдЫрд┐рдкрд╛рдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╕рдордХрд╛рд▓рд┐рдХ рдФрд░ рдЕрд╡рд░реБрджреНрдз рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдереНрд░реЗрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рд▓рдЧрд╛рддрд╛рд░ рдпрд╛ рдХрд┐рд╕реА рднреА рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рдирд┐рд░рдВрддрд░ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдпрд╛рдж рди рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЪрд▓реЛ рдЗрд╕реЗ RxJava рдХреЗ рд╕рд╛рде рдХрд░реЗрдВ:

 fun receive() { Observable.fromCallable<ByteArray> { getReport() } .subscribeOn(Schedulers.io()) .observeOn(Schedulers.computation()) .repeat() .subscribe({ /* check it[0] (this is report id) and handle data */ },{ /* handle exeption */ }) } 

рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдЖрдИрдбреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред

рдпреВрдПрд╕рдмреА рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдкрдХреЛ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ onDestroy рдЧрддрд┐рд╡рд┐рдзрд┐ рдпрд╛ OnMeared рдореЗрдВ ViewModel рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

  fun close() { usbRequest?.close() usbConnection?.releaseInterface(usbInterface) usbConnection?.close() } 

рдирд┐рд╖реНрдХрд░реНрд╖


рд▓реЗрдЦ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдФрд░ рдЖрджрд┐рдо, рдЕрддреНрдпрдВрдд рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдХреЛрдб рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдХрдИ рдпреВрдПрд╕рдмреА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ, рди рдХреЗрд╡рд▓ рдПрдЪрдЖрдИрдбреА, рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИрдВ рдФрд░ рдпреВрдПрд╕рдмреА рд╕реНрдЯреИрдХ рдХреА рдЕрдЪреНрдЫреА рд╕рдордЭ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдПрдХреНрд╕ред рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА


Source: https://habr.com/ru/post/hi470365/


All Articles