Is it that you have defined a sequence of operations?? as in a pre-defined sequence in which packets should be received?? If thats the case, then I'm afraid USB does not send descriptors in a sequential fashion. They can come randomly.
there is no pre-defined sequence, setup packets are assessing independently, because they have data that explain, what is the next step. I process the setup transactions and wait for any token packet like IN_TOKENS, OUT_TOKENS, based on what i got from setup stage, i can decide about the next operation.
based on windows enumeration steps (from windows usb team blog), firstly i should see the setup packet and following it an IN_TOKEN (from USB2.0 specs chapter 6) then i'll send the DATA1 followed by a Device_Descriptor, after that i have to get an OUT_TOKEN next a DATA1 from Host with no data and just 16 bits of CRC(0 value),
after that i have to send an ACK to Host.
this is the first step after this i have to get a Set_Address, the only thing i can get, is an incomplete OUT_TOKEN after i send my Device_Descriptor, so i serve every TOKEN not in any pre-defined order , but if it was random i should see some other TOKENS randomley?
and if you think it's random, how can I recognize?