micropython/usb/usb-device/usb/device/core.py: Add alternate setting support plus a few fixes and improvements.#1031
micropython/usb/usb-device/usb/device/core.py: Add alternate setting support plus a few fixes and improvements.#1031HLammers wants to merge 3 commits into
Conversation
⦁ Removed `import time` (not used) ⦁ Removed unused/duplicate `_Device.config` argument `config_str` ⦁ Fixed the loop reserving other string indexes used by built-in drivers `while len(strs) < builtin_driver.str_max:` to `while len(strs) < builtin\_driver.str\_max - 1:` (row 169)because str_max equals to one more than the highest string descriptor index value used by any built-in descriptor according to the [docs](https://docs.micropython.org/en/latest/library/machine.USBDevice.html) and added a comment that this loop is probably unnecessary or even wrong ⦁ Added `bAlternateSetting` as argument to `Descriptor.interface`, because it is used for USB MIDI 2.0 ⦁ Some code optimisations
Update fromatting
|
The updated version of |
projectgus
left a comment
There was a problem hiding this comment.
Hey @HLammers,
Sorry I never saw this when you originally submitted it. Appreciate you submitting these improvements, thank you!
I have a couple of questions but generally this looks good to me.
| from micropython import const | ||
| import machine | ||
| import struct | ||
| import time |
There was a problem hiding this comment.
Confused by this as PR description says:
Removed import time (not used)
... and it is indeed not used, from what I can see?
| ): # This is possibly unnecessary or wrong because | ||
| # https://docs.micropython.org/en/latest/library/machine.USBDevice.html | ||
| # states all string values except index 0 should be plain ASCII |
There was a problem hiding this comment.
What's happening here is that we're expanding the strs list to cover the built-in driver indexes, because these str index values are actually handled by C code and never read by Python code. By putting something here we make sure that the indexes elsewhere in the driver match what the host sees.
This is why the documentation says the strings arguments should be strings - the values provided by the Python caller should be strings, these values are internal placeholders to pad the index out.
I assume the off-by-one is a real bug, though - I'm guessing you found that strings were reported wrong without this?
Summary
bAlternateSettingas argument toDescriptor.interface, because it is used for USB MIDI 2.0while len(strs) < builtin_driver.str_max:towhile len(strs) < builtin\_driver.str\_max - 1:(row 169) becausestr_maxequals to one more than the highest string descriptor index value used by any built-in descriptor according to the docs and added a comment that this loop is probably unnecessary or even wrongimport time(not used)_Device.configargumentconfig_strBufferclass)Testing
strsTrade-offs and Alternatives
None