It seems on host side the device is put to suspend after there is nothing returned for a period of time.
From host side it may use SET_IDLE to set idle rate, when the idle rate period timeout, the device should send packet even there is nothing changed.
From device side the easiest way to avoid suspend could be send last packet in specific rate (that's what is done when idle rate is used) to host to keep bus active.
In general, if a device wants to support remote wakeup, it should have its ConfigurationDescriptor::bmAttributes.D5 set to 1 to inform host it supports remote wakeup. Before suspend device, host issues SetDeviceFeature with remote wakeup enabled to enable remote wakeup, then when device wants to wakeup it issues REMOTE WAKEUP on bus to inform host it should be resumed from suspended state. After host resume the port, ClearDeviceFeature with remote wakeup disabled should be sent by host to disable remote wakeup.