I had this same issue and got around it by making a polymorphic like descriptor.
//get data
0x85, 0x16, // REPORT_ID (22)
0x96, 0x00, 0x01, // REPORT_COUNT (256) one less then rid
0x09, 0x00, // USAGE (Undefined)
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
//send data for anythign 8 or less. Also has support more data via header
0x85, 0x12, // REPORT_ID (18)
0x95, 0x08, // REPORT_COUNT (
7 + report ID
0x09, 0x00, // USAGE (Undefined)
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
I then can send a byte and received data. When I send data from the PC the first byte tells me what type of data I need. When returning I can use a length byte. You could adjust as you need.