Fix a bug where EndpointInfo would always be picked from the last
alternative setting. When looking up matching EndpointInfo and InterfaceSetting for an endpoint, a reference to range variable is stored. If range is allowed to continue, the value of this variable will be updated. It's a trick to allow use of "nil" pointer as a "found" variable, but it requires a careful management of the range iterations.
This commit is contained in:
@@ -132,6 +132,7 @@ func (d *Device) openEndpoint(cfgNum, ifNum, setNum, epAddr uint8) (*endpoint, e
|
|||||||
setAlternate = i != 0
|
setAlternate = i != 0
|
||||||
debug.Printf("found setup: %+v [default: %v]\n", s, !setAlternate)
|
debug.Printf("found setup: %+v [default: %v]\n", s, !setAlternate)
|
||||||
ifs = &s
|
ifs = &s
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ifs == nil {
|
if ifs == nil {
|
||||||
@@ -143,6 +144,7 @@ func (d *Device) openEndpoint(cfgNum, ifNum, setNum, epAddr uint8) (*endpoint, e
|
|||||||
if endpointAddr(e.Number, e.Direction) == epAddr {
|
if endpointAddr(e.Number, e.Direction) == epAddr {
|
||||||
debug.Printf("found ep #%d %s in %+v\n", e.Number, e.Direction, *ifs)
|
debug.Printf("found ep #%d %s in %+v\n", e.Number, e.Direction, *ifs)
|
||||||
ep = &e
|
ep = &e
|
||||||
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ep == nil {
|
if ep == nil {
|
||||||
|
Reference in New Issue
Block a user