============================================================================== = define generic event struct (probably Pd-ized input_event ) something like: struct input_event { struct timeval time; t_int type; t_int code; t_int value; }; The question is whether the timeval is needed at all. Linux and Darwin support it. Currently, I can only think of UPS PWR events actually using timevals. =============================================================================== = HID Manager Type/Usage/UsagePage -> Linux Type/Code mapping UsagePage Misc Input/Generic Desktop X == ev_rel/rel_x Button Input/Button #1 == ev_key/btn_left LED UsagePage => ev_led LED Usages == Linux ev_led codes ============================================================================== = device selection by # (1,2,...), generic name (mouse1, joystick2, tablet3...), or device name ("Trackpad", "Microsoft 5-button Mouse with IntelliEye(TM)", etc.) first get # working, that's probably the easiest by # ------------------------------ GNU/Linux sprintf(x_devname->s_name,"/dev/input/event%d",deviceNum + 1); Darwin prHIDBuildDeviceList(); currentHIDDevice = discoveredDevices[gNumberOfHIDDevices]; ============================================================================== = figure out how to store device ID in obj struct (in SC_HID.c its locID and cookie) - it should probably just store the Pd arguments - this will have to be dealt with when the "mouse0", "joystick2" arguments are implemented ============================================================================== = raw values vs. calibrated - relative axes should probably be raw data, since its pixel data, but then this causes problems with sensitivity across different mice. The mouse sensitivity would probably best translate as resolution, ie calibrated data, rather than sensitivity, ie raw data. - absolute axes should be calibrated, so that the same positions on different devices map to the same value ============================================================================== = pollfn for mouse-like devices - determine whether using a pollfn is actually better than using a t_clock - any device that acts like a system mouse can be used with a pollfn, since the mouse data will go thru Pd's network port, triggering the pollfn. - this is probably unnecessary since the t_clock seems to run well at 1ms delay ============================================================================== = function return values - most functions probably do not need return values - return (1) seems to be the default on many functions ============================================================================== = control input messages - the [delay( message should be replaced by the [poll( msg - should [poll( also start things, or should it just set polling time? - are [start( and [stop( needed? is 0/1 enough? ============================================================================== = ditch x_devname in hid_linux.c - use sprintf(arg,"/dev/input/event%d",x_ddevice_number); instead ============================================================================== = consistent console output void hid_post(const char *format, const char *); ============================================================================== = if device is closed and obj is started, open device and start ______________________________________________________________________________ ------------------------------------------------------------------------------ BUGS ______________________________________________________________________________ ------------------------------------------------------------------------------ ______________________________________________________________________________ - BUG x->x_delay reset to default when device is opened ______________________________________________________________________________ - BUG: [mouse] and [joystick] arguments don't work to open device ______________________________________________________________________________ - BUG: [open('ing a device causes all other active [hid] objs to have their devices closed - this means only one [hid] object can have an open device at one time - I thought this was due to the hid_close_device() call in hid_open(), which releases the device list, but this doesn't seem to be the case. ______________________________________________________________________________ - BUG: getting events from the queue doesn't output a 0 value event when the motion stops, so when the mouse stops, the sound keeps playing. This is probably only a problem on relative axes. This will probably have to be implemented on a platform-specific level: - On Darwin/MacOSX, I think that the HIDGetEvent() loop will have to be followed by one call to HIDGetElementValue()