The above process can't be taken care by Cy api library.
There will surely need to be disconnect event and a flag which can be incremented on a disconnect.
So, the first time you connect, bInterval - 0 will be sent and a flag is updated
Disconnect the device from host
Then based on flag condition, send the second bInterval settings.
You will have to develop a logic in the dscr.c file to send a specific endpoint descriptor based on a flag value.
But, there should be a physical device disconnect. Please confirm that this can be implemented for your application.
So I understand how to do it with physical device disconnect, but my use case doesn't allow for that. Is there a way to do this without physical disconnect? Maybe just to send updated config descriptor and reinitialize the device or something?
You can do the following when you want to change the bInterval value:
1.) call CyU3PConnectState(CyFalse, CyFalse) //this will cause the USB block to disconnect and disappear from control centre
2.) Change the descriptor values and store it in firmware according to your application and then commit to host when there is a next GET_DESCRIPTOR request.
3.) call CyU3PConnectState(CyTrue, CyTrue) //this will make the USB block to enumerate the device
You can refer to the SDK example: C:\Program Files (x86)\Cypress\EZ-USB FX3 SDK\1.3\firmware\basic_examples\cyfxbulklpautoenum
Please go through the firmware and understand how the descriptors are sent from the firmware.
You can use a similar implementation for your application.