рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ :
рдпрд╣ PyUSB 1.0 рдореИрдиреБрдЕрд▓ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ
рдпрд╣ рдЧрд╛рдЗрдб PyUSB рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рд╕реЗ рдХрдорд┐рдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╡рд╛рд▓рдХ рдЧрд╛рдЗрдб рдХреЗ рдореБрдЦреНрдп рд▓реЗрдЦрдХ рд╣реИрдВредрдореБрдЭреЗ рдЕрдкрдирд╛ рдкрд░рд┐рдЪрдп рджреЛ
PyUSB 1.0 рдПрдХ
рдкрд╛рдпрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ
USB рдХреА рдЖрд╕рд╛рди рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред PyUSB рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- рдкрд╛рдпрдерди рдореЗрдВ 100% рд▓рд┐рдЦрд╛:
0.x рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдЬреЛ рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдереЗ, рд╕рдВрд╕реНрдХрд░рдг 1.0 рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕реА рдЕрдиреБрднрд╡ рдХреЗ рдмреЗрд╣рддрд░ рдкреНрдпреВрд╕ рдмреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред - рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рддрдЯрд╕реНрдерддрд╛:
рд╕рдВрд╕реНрдХрд░рдг 1.0 рдореЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рдмреИрдХрдПрдВрдб рдпреЛрдЬрдирд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдПрдкреАрдЖрдИ рдХреЛ рд╕рд┐рд╕реНрдЯрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╕реЗ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред IBackend рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрди рджреЛ рдкрд░рддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред PyUSB libusb 0.1, libusb 1.0 рдФрд░ OpenUSB рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди рдмреИрдХрдПрдВрдбреНрд╕ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЕрдкрдирд╛ рдмреИрдХреЗрдВрдб рдЦреБрдж рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред - рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА:
PyUSB рдХреЛ Python> = 2.4, ctypes рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХрдо рд╕реЗ рдХрдо рд╕рдорд░реНрдерд┐рдд рдмреИрдХ-рдЗрди рдмреИрдХреЗрдВрдб рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред - рд╕рд╛рджрдЧреА:
USB рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдЗрддрдирд╛ рдЖрд╕рд╛рди рдХрднреА рдирд╣реАрдВ рд░рд╣рд╛! USB рдПрдХ рдЬрдЯрд┐рд▓ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдФрд░ PyUSB рдореЗрдВ рд╕рдмрд╕реЗ рдЖрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдкреНрд░реАрд╕реЗрдЯ рд╣реИрдВред - Isochronous рдЧрд┐рдпрд░ рд╕рдорд░реНрдерди:
рдпрджрд┐ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреИрдХреЗрдВрдб рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рддреЛ PyUSB рд╕рдордХрд╛рд▓рд┐рдХ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдпрджреНрдпрдкрд┐ PyUSB USB рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рдХрдо рджрд░реНрджрдирд╛рдХ рдмрдирд╛рддрд╛ рд╣реИ, рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ USB рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдиреНрдпреВрдирддрдо рдЬреНрдЮрд╛рди рд╣реИред рдпрджрд┐ рдЖрдк USB рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ Jan Axelson
рдХреА рдЙрддреНрдХреГрд╖реНрдЯ USB рдкреВрд░реНрдг рдкреБрд╕реНрддрдХ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред
рдмрд╣реБрдд рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ!
рдХреМрди рд╣реИ рдХреМрди
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП PyUSB рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдВред рд╕рднреА PyUSB рдореЙрдбреНрдпреВрд▓ рдирд┐рдореНрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде
USB рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реИрдВ:
рдореЙрдбреНрдпреВрд▓ | рд╡рд┐рд╡рд░рдг |
---|
рдХреЛрд░ | рдореБрдЦреНрдп USB рдореЙрдбреНрдпреВрд▓ред |
util | рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпред |
рдирд┐рдпрдВрддреНрд░рдг | рдорд╛рдирдХ рдкреНрд░рдмрдВрдзрди рдЕрдиреБрд░реЛрдзред |
рд╡рд┐рд░рд╛рд╕рдд | рд╕рдВрд╕реНрдХрд░рдг 0.x рд╕рдВрдЧрддрддрд╛ рдкрд░рддред |
рдмреИрдХрдПрдВрдб | рдПрдХ рдмреИрдХрдкреИрдХ рдЬрд┐рд╕рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреИрдХрдПрдВрдб рд╣реЛрддреЗ рд╣реИрдВред |
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ
рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджрд░реНрдЬ рдХрд░реЗрдВ:
>>> import usb.core >>> dev = usb.core.find()
рдЦреИрд░, рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рд╕рд░рд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдкрд░реАрдХреНрд╖рдг) рдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд (рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ) рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ:
import usb.core import usb.util
рдкрд╣рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ PyUSB рдкреИрдХреЗрдЬ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреА рд╣реИрдВред
usb.core рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдФрд░
usb.util рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реЛрддреЗ рд╣реИрдВред рдирд┐рдореНрди рдЖрджреЗрд╢ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрдЬрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ рддреЛ рд╡рд╕реНрддреБ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреЛрдИ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ред рдЕрдЧрд▓рд╛, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдиреЛрдЯ: рддрд░реНрдХреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ, рдХрдИ PyUSB рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рд╣реИред
рдлрд┐рд░, рд╣рдо рдЙрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд╣рдо рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрддреЗ рд╣реИрдВред
рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдкрддрд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдмрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ
рд▓реЗрдЦрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
dev.write(1, 'test')
рдпрд╣рд╛рдВ рд╣рдо рдПрдбреНрд░реЗрд╕
1 рдкрд░ рдмреНрд░реЗрдХрдкреНрд╡рд╛рдЗрдВрдЯ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдЯреЗрд╕реНрдЯ' рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред
рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ?
PyUSB рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред
рдорд╛рдирдХ рдкрд╛рдпрдерди рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, PyUSB USB рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП usb.core.USBError рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЖрдк PyUSB рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣
рд▓реЙрдЧрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рд╛рде
PYUSB_DEBUG рдкрд░реНрдпрд╛рд╡рд░рдг
рдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
рдорд╣рддреНрд╡рдкреВрд░реНрдг ,
рддреНрд░реБрдЯрд┐ ,
рдЪреЗрддрд╛рд╡рдиреА ,
рдЬрд╛рдирдХрд╛рд░реА рдпрд╛
рдбреАрдмрдЧ ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рдВрджреЗрд╢
sys.stderr рдкрд░ рднреЗрдЬреЗ
рдЬрд╛рддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░
PYUSB_LOG_FILENAME рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЙрдЧ рд╕рдВрджреЗрд╢ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорд╛рди рд╕рд╣реА рдкрде рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ рд╡рд╣рд╛рдВ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗ, рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ
sys.stderr рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреБрдо рдХрд╣рд╛рдБ рд╣реЛ
рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ
рдЦреЛрдЬ () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЬреБрдбрд╝реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ 0xfffe рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рд╡рд┐рдХреНрд░реЗрддрд╛ ID рдФрд░ 0x0001 рдХрд╛ рдЙрддреНрдкрд╛рдж ID рд╣реИред рдпрджрд┐ рд╣рдореЗрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗ:
import usb.core dev = usb.core.find(idVendor=0xfffe, idProduct=0x0001) if dev is None: raise ValueError('Our device is not connected')
рдпрд╣ рд╕рдм рд╣реИ, рдлрд╝рдВрдХреНрд╢рди
usb.core.Device рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ
рд▓реМрдЯрд╛рдПрдЧрд╛ рдЬреЛ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рдпрд╣
рдХреЛрдИ рдирд╣реАрдВ рд▓реМрдЯреЗрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕
рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдпреВрдПрд╕рдмреА рдкреНрд░рд┐рдВрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИ? рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ:
7 USB рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд┐рдВрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИред рдУрд╣, рд░реБрдХреЛ, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдкреНрд░рд┐рдВрдЯрд░ рдХреЛ рдирдВрдмрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ? рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ:
рдХреНрдпрд╛ рд╣реБрдЖ? рдЦреИрд░, рдереЛрдбрд╝рд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдордп ...
рдЦреЛрдЬ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ
find_all рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
рдлрд╛рд▓реНрд╕ рдХреЛ рдбрд┐рдлреЙрд▓реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдпрд╣ рдЭреВрда рд╣реИ
[рез] , рдкрд╣рд▓реЗ рдорд╛рдкрджрдВрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкрд╣рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЦреЛрдЬреЗрдВрдЧреЗ (рд╣рдо рдЬрд▓реНрдж рд╣реА рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ)ред рдпрджрд┐ рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕рд╣реА рдорд╛рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдорд╛рдирджрдВрдб рдХреЗ рдорд┐рд▓рд╛рди рдХреЗ рдмрдЬрд╛рдп рд╕рднреА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рдПрдЧрд╛ред рд╡рд╣ рд╕рдм рд╣реИ! рд╕рд░рд▓, рд╕рд╣реА?
рдХреНрдпрд╛ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдирд╣реАрдВ! рдореИрдВрдиреЗ рдЕрднреА рддрдХ рд╕рдм рдХреБрдЫ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ рд╣реИ: рдХрдИ рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕
рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдкреНрд░рд┐рдВрдЯрд░реЛрдВ рдХреЛ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рднреА рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ рдореЗрдВ рд╕реЗ рдПрдХ bInterfaceClass рдкрд░ рд╕реЗрдЯ рд╣реИред 7. рдпрджрд┐ рдЖрдк рдореЗрд░реА рддрд░рд╣ рдПрдХ
рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдХреНрдпрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрддреНрддрд░: рд╣рд╛рдВ, рд╡рд╣ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рднреА рдЬреБрдбрд╝реЗ рдкреНрд░рд┐рдВрдЯрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ:
import usb.core import usb.util import sys class find_class(object): def __init__(self, class_): self._class = class_ def __call__(self, device):
Custom_match рдкреИрд░рд╛рдореАрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдиреБрдЪрд┐рдд рдХреЗ рд▓рд┐рдП рдЧрд▓рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде
custom_match рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
рдпрд╣рд╛рдВ рд╣рдо рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛ 0xfffe рдХреЗ рдкреНрд░рд┐рдВрдЯрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдЕрдкрдирд╛ рд╡рд░реНрдгрди рдХреАрдЬрд┐рдП
рдареАрдХ рд╣реИ, рд╣рдордиреЗ рдЕрдкрдирд╛ рдбрд┐рд╡рд╛рдЗрд╕ рдвреВрдВрдв рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рд╡реИрд╕реЗ, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ, рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреНрд░рдХрд╛рд░ ...
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рддреЛ рдЖрдк рдЙрдкрдХрд░рдг рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
>>> dev.bLength >>> dev.bNumConfigurations >>> dev.bDeviceClass >>>
рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
for cfg in dev: sys.stdout.write(str(cfg.bConfigurationValue) + '\n')
рдЙрд╕реА рддрд░рд╣, рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдг рдмрд┐рдВрджреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкреБрди: рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рд╡рд░рдгрдХ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
for cfg in dev: sys.stdout.write(str(cfg.bConfigurationValue) + '\n') for intf in cfg: sys.stdout.write('\t' + \ str(intf.bInterfaceNumber) + \ ',' + \ str(intf.bAlternateSetting) + \ '\n') for ep in intf: sys.stdout.write('\t\t' + \ str(ep.bEndpointAddress) + \ '\n')
рдЖрдк рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛рдУрдВ рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдБ рд╣реИ:
>>>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ 0. рд╕реЗ рдЧрд┐рдиреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ! рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдкрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдХреБрдЫ рдЕрдЬреАрдм рд╣реИ ... рд╣рд╛рдБ, рдЖрдк рд╕рд╣реА рд╣реИрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ рджреЛ рдорд╛рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд▓реЗрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд╣рд▓рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рд╣рдо
cfg [(0,1)] рд▓рд┐рдЦреЗрдВрдЧреЗред
рдЕрдм рд╡рд░реНрдгрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реАрдХрд╛ рд╕реАрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ - рдПрдХ рдЙрдкрдпреЛрдЧреА
find_descriptor рдлрд╝рдВрдХреНрд╢рдиред рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рд┐рдВрдЯрд░ рдЦреЛрдЬ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВред
find_descriptor рджреЛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде, рд▓рдЧрднрдЧ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- find_descriptor рдЕрдкрдирд╛ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд░реЛрдд рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЦреЛрдЬреЗрдВрдЧреЗ ред
- рдЗрд╕рдореЗрдВ рдХреЛрдИ рдмреИрдХреЗрдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рдирд╣реАрдВ рд╣реИ [реи] ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕
cfg рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╣реИ, рдФрд░ рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ 1 рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╣ рдХрд░реЗрдВрдЧреЗ:
import usb.util alt = usb.util.find_descriptor(cfg, find_all=True, bInterfaceNumber=1)
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
find_descriptor usb.util рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП
custom_match рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдХрдИ рд╕рдорд╛рди рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВрдХрднреА-рдХрднреА рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдЬреБрдбрд╝реЗ рджреЛ рд╕рдорд╛рди рдЙрдкрдХрд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдЙрдирдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдбрд┐рд╡рд╛рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВ рдЬреЛ USB рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВ:
рдмрд╕ рдФрд░
рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрд╣рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдмреИрдХрдПрдВрдб рд╕реЗ рдЖрддреА рд╣реИрдВ, рдФрд░ рдмреИрдХрдПрдВрдб рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ рдХрд┐рд╕реА рднреА рдкрд░ рд╕реЗрдЯ
рдирд╣реАрдВ рд╣реИрдВ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдбрд┐рд╡рд╛рдЗрд╕ рдмрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкрддреЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИрдВ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдПрдХ рд╣реА
idVendor рдФрд░
idProduct рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, USB рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдХреБрдЫ рдорд╛рдирдХ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рдореИрдВрдиреЗ
USB рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рдореБрдЭреЗ рд╡рд░реНрдгрдирдХрд░реНрддрд╛, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдЗрдВрдЯрд░рдлреЗрд╕, рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░рдХрд╛рд░ рдФрд░ рдЙрди рд╕рднреА рд╕реЗ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ ... рдФрд░ рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд, рдЖрдк рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ: рдбрд┐рд╡рд╛рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рд╣реЛ! PyUSB рдЖрдкрдХреЗ рдЬреАрд╡рди рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рдбрд┐рд╡рд╛рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ
set_configuration рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛ рдЖрдкрдХреА рд░реБрдЪрд┐ рд╣реИ
bConfigurationValue рд╣реИ ред рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдХрд░рдгреЛрдВ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд┐рдП рдЧрдП рджреЗрдЦрд╛ рдерд╛)ред рдЗрд╕рд▓рд┐рдП, PyUSB рдореЗрдВ, рдЖрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рддрд░реНрдХ рдХреЗ рдПрдХ
set_configuration рдЕрдиреБрд░реЛрдз рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╡рд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ (рдпрджрд┐ рдЖрдкрдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ bConfigurationValue рдлрд╝реАрд▓реНрдб 5 рд╣реИ
[рей] , рдмрд╛рдж рдХреЗ рдкреНрд░рд╢реНрди рд╕рдорд╛рди рд╣реЛрдВрдЧреЗ:
>>> dev.set_configuration(5)
рд╡рд╛рд╣! рдЖрдк
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ
set_configuration рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд╣рд╛рдВ, рдЙрд╕рдХреЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕реЗрдЯ рд╡рд┐рдзрд┐ рднреА рд╣реИред
рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рд╣реИ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдкред рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╕рдХреНрд░рд┐рдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдорд▓реНрдЯреАрдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд┐рдВрдЯрд░ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ, рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рдкреНрд░рд┐рдВрдЯрд░ рдФрд░ рдПрдХ рд╕реНрдХреИрдирд░ рджреЛрдиреЛрдВ рд╣реИред рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдПрдВ), рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд┐рдВрдЯрд░ рдФрд░ рд╕реНрдХреИрдирд░ рд╣реИ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ 2 рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИрдВ: рдПрдХ рдкреНрд░рд┐рдВрдЯрд░ рдХреЗ рд▓рд┐рдП рдФрд░ рдПрдХ рд╕реНрдХреИрдирд░ рдХреЗ рд▓рд┐рдПред рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╡рд╛рд▓реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдХрдВрдкреЛрдЬрд┐рдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЕрдкрдиреЗ рдорд▓реНрдЯреАрдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд┐рдВрдЯрд░ рдХреЛ рдЕрдкрдиреЗ рдХрдВрдкреНрдпреВрдЯрд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛: рдкреНрд░рддреНрдпреЗрдХ "рддрд╛рд░реНрдХрд┐рдХ" рдкрд░рд┐рдзреАрдп рдбрд┐рд╡рд╛рдЗрд╕ рдЬреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ
[рек] ред
рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИ рдЖрдкрдиреЗ рдкреВрдЫрд╛ред рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рд╡рд╛рд▓реЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреЛрдИ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ
[рел] рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдЕрд░реНрдерд╛рддреН, рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╕рдХреНрд░рд┐рдп рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, USB рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдкреНрд░рд╛рдердорд┐рдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рд╕рдордХрд╛рд▓рд┐рдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
[рем] , рддрд╛рдХрд┐ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдВ, рдПрдХ рджреВрд╕рд░реА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдПрдХ рд╕рдордХрд╛рд▓рд┐рдХ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЗрд╡рд▓ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ
[]] ред рдЖрдк
set_interface_altsetting рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛
рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ:
>>> dev.set_interface_altsetting(interface = 0, alternate_setting = 0)
рдЪреЗрддрд╛рд╡рдиреАUSB рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП SET_INTERFACE рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧ рд╣реИрдВ рдпрд╛ рдпрд╣ SET_INTERFACE рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрджрд░
set_interface_altsetting рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ:
try: dev.set_interface_altsetting(...) except USBError: pass
рдЖрдк
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ,
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░
рд╡реИрдХрд▓реНрдкрд┐рдХ_рд╕реЗрдЯрд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ
bInterfaceNumber рдФрд░
bAlternateSetting рдлрд╝реАрд▓реНрдб рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ
рд╣реИрдВ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
>>> intf = find_descriptor(...) >>> dev.set_interface_altsetting(intf) >>> intf.set_altsetting()
рдЪреЗрддрд╛рд╡рдиреАрдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдХреНрд░рд┐рдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭрд╕реЗ рдмрд╛рдд рдХрд░реЛ рдордзреБ
рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ рдпреВрдПрд╕рдмреА рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреИрд╕реЗ рдХрд░реЗрдВред USB рдореЗрдВ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╣реИрдВ: рдмрд▓реНрдХ рдЯреНрд░рд╛рдВрд╕рдлрд░, рдЗрдВрдЯрд░рдкреНрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд░, рдЖрдЗрд╕реЛрдХреНрд░реЛрдирд╕ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдФрд░ рдХрдВрдЯреНрд░реЛрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд░ред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрддреНрд░ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ USB рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реИред
рдирд┐рдпрдВрддреНрд░рдг рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдПрдХрдорд╛рддреНрд░ рд╕реНрдЯреНрд░реАрдо рд╣реИ рдЬрд┐рд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдмрд╛рдХреА рдмрд╕ рдпреВрдПрд╕рдмреА рдмрд┐рдВрджреБ рд╕реЗ рдХрдЪреНрдЪреЗ рдбреЗрдЯрд╛ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдп рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдкреНрд░рд╡рд╛рд╣ рдЙрд╕реА рдХрд╛рд░реНрдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЖрдк
ctrl_transfer рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ (OUT) рдФрд░ рдЗрдирдХрдорд┐рдВрдЧ (IN) рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╡рд╛рд╣ рдХреА рджрд┐рд╢рд╛
bmRequestType рдкреИрд░рд╛рдореАрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА
рдЬрд╛рддреА рд╣реИред
рдкреИрд░рд╛рдореАрдЯрд░
ctrl_transfer рдирд┐рдпрдВрддреНрд░рдг рдЕрдиреБрд░реЛрдз рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рдг рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред
[]] :
>>> msg = 'test' >>> assert dev.ctrl_transfer(0x40, CTRL_LOOPBACK_WRITE, 0, 0, msg) == len(msg) >>> ret = dev.ctrl_transfer(0xC0, CTRL_LOOPBACK_READ, 0, 0, len(msg)) >>> sret = ''.join([chr(x) for x in ret]) >>> assert sret == msg
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдпрдВрддреНрд░рдг рдЕрдиреБрд░реЛрдз рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд▓реВрдкрдмреИрдХ рдкрд╛рдЗрдк рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЖрдк
CTRL_LOOPBACK_WRITE рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЖрдк
CTRL_LOOPBACK_READ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рдЪрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ -
bmRequestType ,
bmRequest ,
wValue рдФрд░
wIndex - рдХрдВрдЯреНрд░реЛрд▓ рд╕реНрдЯреНрд░реАрдо рдХреА рдорд╛рдирдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдкрд╛рдВрдЪрд╡рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рддреЛ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдбреЗрдЯрд╛ рд╣реИ рдпрд╛ рдЗрдирдХрдорд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкрдврд╝реЗ рдЬрд╛ рд░рд╣реЗ рдбреЗрдЯрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП
__in____ рд╡рд┐рдзрд┐ рдХреЗ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ
рдХрд┐рд╕реА рднреА (рдпрд╛ рдЖрдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 0) рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдСрдкрд░реЗрд╢рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ, рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдЗрдирдХрдорд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ, рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдПрдХ
рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдиреНрдп рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдФрд░ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░рдорд╢рдГ
рд▓рд┐рдЦрдиреЗ рдФрд░
рдкрдврд╝рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рдкрддреЗ рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░рд╛ рд▓реВрдкрдмреИрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдмрд╢рд░реНрддреЗ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ 1 рдкрд░ рдПрдХ рд▓реВрдкрдмреИрдХ рдкрд╛рдЗрдк рд╣реЛ:
>>> msg = 'test' >>> assert len(dev.write(1, msg, 100)) == len(msg) >>> ret = dev.read(0x81, len(msg), 100) >>> sret = ''.join([chr(x) for x in ret]) >>> assert sret == msg
рдкрд╣рд▓реЗ рдФрд░ рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ - рдпрд╣ рдХреНрд░рдорд╢рдГ рдЪреЗрдХрдкреЙрдЗрдВрдЯ рдкрддрд╛ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реИред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ (рд▓рд┐рдЦрдирд╛) рдпрд╛ рдкрдврд╝рдиреЗ (рдкрдврд╝рдиреЗ) рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдпрд╛ рддреЛ
рдкрдврд╝рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╕рд░рдгреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛, рдпрд╛
рд▓рд┐рдЦрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдмреАрдЯрд╛ 2 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде, рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк
рд░реАрдб рдпрд╛
ctrl_transfer рдПрдХ
рдРрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛
array.itemsize рдХреЗ рдорд╛рди рдХреЗ рд╕рд░рдгреА рд╕рдордп рдХреА рд▓рдВрдмрд╛рдИ рд╣реЛрдЧреАред
Ctrl_transfer рдореЗрдВ ,
рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЬрдм
рдЯрд╛рдЗрдордЖрдЙрдЯ рдЫреЛрдбрд╝рд╛
рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
Device.default_timeout рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдСрдкрд░реЗрд╢рдирд▓ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЦреБрдж рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦреЗрдВ
рдбреЗрдЯрд╛
рд╕реНрдЯреНрд░реАрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛,
usb.control рдореЙрдбреНрдпреВрд▓ рдорд╛рдирдХ USB рдирд┐рдпрдВрддреНрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░
usb.util рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ
get_string рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ
рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╖рдп
рд╣рд░ рдорд╣рд╛рди рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдкреАрдЫреЗ рдПрдХ рдорд╣рд╛рди рдЕрд╣рд╕рд╛рд╕ рд╣реИ
рдкрд╣рд▓реЗ, рдХреЗрд╡рд▓
рд▓рд┐рдмрд╛рд╕ рдерд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж libusb 1.0 рдЖрдпрд╛ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 0.1 рдФрд░ 1.0 libusb рдерд╛ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ
рдУрдкрдирдпреВрдПрд╕рдмреА рдмрдирд╛рдпрд╛ рдФрд░ рдЕрдм рд╣рдо рдпреВрдПрд╕рдмреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ
рдЯреЙрд╡рд░ рдСрдл рдмреЗрдмрд▓ рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ
[реп] ред PyUSB рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ? рдЦреИрд░, PyUSB рдПрдХ рд▓реЛрдХрддрд╛рдВрддреНрд░рд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ, рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдХреМрди рд╕рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдк рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА USB рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PyUSB рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЦреЛрдЬ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдирд╣реАрдВ рдмрддрд╛рдпрд╛ред рдпрд╣
рдмреИрдХрдПрдВрдб рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреИрдХрдПрдВрдб рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмреИрдХрдПрдВрдб
usb.backend.IBackend рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ USB рдЬрдВрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рд╣реЛрдЧрд╛, рдмрд┐рд▓реНрдЯ-рдЗрди рд▓рд┐рдмрд╛рд╕ 0.1, рд▓рд┐рдмрд╕рдм 1.0 рдФрд░ рдУрдкрдирдпреВрдПрд╕рдмреА рдмреИрдХрдПрдВрдб рд╣реИрдВред
рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмреИрдХрдПрдВрдб рдХреЛ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕
IBackend рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ
рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ
usb.backend рдкреНрд░рд▓реЗрдЦрди рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
рд╕реНрд╡рд╛рд░реНрдереА рдордд рдмрдиреЛ
рдкрд╛рдпрдерди рдХреЗ рдкрд╛рд╕ рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХрд╣рддреЗ рд╣реИрдВ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдпрд╣ рддрдп рдХрд░реЗрдЧреА рдХрд┐ рдореЗрдореЛрд░реА рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдХрдм рдЙрддрд╛рд░рдирд╛ рд╣реИред рд╣реБрдб рдХреЗ рддрд╣рдд, PyUSB рдЙрди рд╕рднреА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд╕реНрд╡реАрдХреГрдд рдХрд░рдирд╛, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛, рдЖрджрд┐) рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди, рдкрд╛рдпрдерди рджреНрд╡рд╛рд░рд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╡рд┐рдирд╛рд╢ рдХреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╡рдВрдЯрд┐рдд рд╕рдВрд╕рд╛рдзрди рдХрдм рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд┐: рд╢реБрд▓реНрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП,
usb.util рдореЙрдбреНрдпреВрд▓ рд╕рдВрд╕рд╛рдзрди рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдФрд░ рдЬрд╛рд░реА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк
рдХреНрд▓реЗрдо_рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░
рд░рд┐рд▓реАрдЬрд╝_рдЗрдирдлрд╝рд░реНрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
claim_interface , . , .
release_interface , . , . ,
libusb .
( ),
dispose_resources . ( ) ,
find .
, тАФ , API USB. -,
ctypes find_library() . Linux Unix- ,
find_library (
/sbin/ldconfig ,
gcc objdump ) .
/ , . , PyUSB find_library() .
:
>>> import usb.core >>> import usb.backend.libusb1 >>> >>> backend = usb.backend.libusb1.get_backend(find_library=lambda x: "/usr/lib/libusb-1.0.so") >>> dev = usb.core.find(..., backend=backend)
, find_library тАФ get_backend(), , .
API PyUSB (0.--), , , API. , , . PyUSB 1.0
usb.legacy . API API. ┬л ,
import usb import usb.legacy as usb ?┬╗, . тАФ , , . ,
import usb usb.legacy . тАФ .
,
,
e-mail , .
PyUSB .
[1] True False ( ), Python. (true) (false), Python, .
( . тАФ .. ) :
[2] .
[3] USB - . .
[4] , .
[5] , .
[6] , , .
[7] , .
[8] PyUSB 0. ( ).
[9] , . , .