#ifndef DEVICE_H_INCLUDED
#define DEVICE_H_INCLUDED



#define JOY_TYPE_STANDARD   0
#define JOY_TYPE_XBOX360    1
#define JOY_TYPE_XBOX360WL  2

#define JOY_INIT_COMMAND_MAX_LENGTH 255

typedef osbool (joy_device_data_valid_fn)(char *d);

struct joy_device_struct {
  uint8_t                    interface_class;
  uint8_t                    interface_subclass;
  uint8_t                    interface_protocol;
  uint16_t                   vendor_id;
  uint16_t                   product_id;
  char                       *name;
  uint8_t                    type;
  uint8_t                    *report_descriptor;
  uint8_t                    report_descriptor_length;
  uint8_t                    report_data_offset;      // additional bytes before report data starts
  uint8_t                    init_command[JOY_INIT_COMMAND_MAX_LENGTH];
  uint8_t                    init_command_length;
  uint8_t                    auto_flip_axes[JOY_AXES];
  uint8_t                    auto_flip_axes_length;
  joy_device_data_valid_fn   *data_valid;
};

extern uint32_t joy_devices_count;



osbool xbox360wireless_data_validator(char *d);

struct joy_device_struct *lookup_joy_device(uint8_t iClass, uint8_t iSubClass, uint8_t iProtocol, uint16_t vendor, uint16_t product);


#endif
