Thanks, that was really informative.
Would you be interested in advising me on the next stage?
Before I got your reply, I decided to scrap creating my own controller and build directly off the included examply in the Teensyduino library. I figured that would be a less challenging task that an updating older code. I tried adding things, subtracting things, but I always was running into the same problem -- Windows 10 would not recognize it as a game controller at all (it didn't show up in "Setup USB Game Controllers").
Backed into a corner, I decided to try a one-button joystick. The example has conveniently given some elifs for different configuration based on the report size in usb_desc.h. After editing the JOYSTICK_SIZE to 1, I dropped this into the appropriate section of usb_desc.c:
#elif JOYSTICK_SIZE == 1
static uint8_t joystick_report_desc[] = {
0x05, 0x01, //Usage Page (Generic Desktop)
0x09, 0x04, //Usage (Joystick)
0xA1, 0x01, //Collection (Application)
0x15, 0x00, //Logical Minimum 0
0x25, 0x01, //Logical Maximum 1
0x75, 0x01, //Report Size (1)
0x95, 0x01, //Report Count (1)
0x05, 0x09, //Usage Page (Button)
0x19, 0x01, //Usage_Minimum (Button 1)
0x29, 0x01, //Usage Maximum (Button 1)
0x81, 0x02, //Input (Data, Var, Abs)
0x95, 0x01, //Report Count (1) (filler)
0x75, 0x07, //Report Size (7)
0x81, 0x03, //Input (Cnst, Var, Abs)
0xC0 // End Collection
};
Everything else in usb_desc.h, .c, etc. have remained exactly the same. Since there are no statements anywhere else regarding JOYSTICK_SIZE, I assume they don't need to be updated(?).
I made some perfunctory updates to joystick.h but haven't invested much time in it since I'm not sure it impacts Windows recognizing it. I've got it to where it compiles and that's it. I'm not looking to get it working right now, just recognized.
If you have an idea as to the missing puzzle piece here, I'd sure appreciate it.