Thanks, that worked.
ES still said "No Gamepads Detected" but when I held down a button on the SNES pad it showed its name and let me configure it.
Any possible reasons why I wasn't detected before creating the 99-gamepad.rules file? Here is the HID descriptor I use for the gamepad:
0x05,0x01, // USAGE_PAGE (Generic Desktop)
0x09,0x05, // USAGE (Game Pad)
0xA1,0x01, // COLLECTION (Application)
0x15,0x00, // LOGICAL_MINIMUM(0)
0x25,0x01, // LOGICAL_MAXIMUM(1)
0x35,0x00, // PHYSICAL_MINIMUM(0)
0x45,0x01, // PHYSICAL_MAXIMUM(1)
0x75,0x01, // REPORT_SIZE(1)
0x95,0x08, // REPORT_COUNT(8)
0x05,0x09, // USAGE_PAGE(Button)
0x19,0x01, // USAGE_MINIMUM(Button 1)
0x29,0x08, // USAGE_MAXIMUM(Button 8)
0x81,0x02, // INPUT(Data,Var,Abs)
0x05,0x01, // USAGE_PAGE(Generic Desktop)
0x25,0x07, // LOGICAL_MAXIMUM(7)
0x46,0x3B,0x01, // PHYSICAL_MAXIMUM(315)
0x75,0x04, // REPORT_SIZE(4)
0x95,0x01, // REPORT_COUNT(1)
0x65,0x14, // UNIT(Eng Rot:Angular Pos)
0x09,0x39, // USAGE(Hat Switch)
0x81,0x42, // INPUT(Data,Var,Abs,Null)
0x65,0x00, // UNIT(None)
0x95,0x01, // REPORT_COUNT(1)
0x81,0x01, // INPUT(Cnst,Ary,Abs)
0xC0