TODO: make open functions: device number vendor_id product_id Product String ============================================================================== = test verbose names - matju says symbols are compared by pointer, so they are fast - try verbose names like: syn = sync snd = sound msc = misc rep = repeat pwr = power - maybe these too abs = absolute rel = relative btn = button - maybe make the type the full name, with the code using the abbreviation - change generic ev_9 to type_9 - change word "code" to "element" ============================================================================== = hid/serial - open/close status outlet - [send ( to send data - [tgl] 1/0 for open/close ============================================================================== = linux input synch events (EV_SYN) - these seem to be generated by the Linux kernel, so they probably don't fit in with the [hid] scheme. Probably the best thing is to ditch them, or figure out whether they should be used in controlling the flow of event data, as they are intended. ============================================================================== = open/close status outlet ============================================================================== = profile [hid] object and usage - find out if [autoscale] takes a lot of CPU power, or where in [hid] is using CPU where it doesn't have to be ============================================================================== = device selection by # (1,2,...), generic name (mouse1, joystick2, tablet3...), or device name ("Trackpad", "Microsoft 5-button Mouse with IntelliEye(TM)", etc.) ============================================================================== = Report available FF effects - check against HID Utilities Source/PID.h ============================================================================== = device 0 gets events for all available devices - it might be useful to have device #0 open all available devices and output the events. ============================================================================== = 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 ============================================================================== = 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 - at standard block size (64 samples), one block = ~1.5ms ============================================================================== = function return values - most functions probably do not need return values ============================================================================== = control input messages - are [poll(, [start(, and [stop( needed? is 0/1/delay# enough? ============================================================================== = consistent console output void hid_post(const char *format, const char *); ============================================================================== = event name changes - make key/button Type "button" rather than "key" (undecided on this one) ============================================================================== = make [linuxhid] [darwinhid] and [windowshid] - so much info is lost in the translation to a common event scheme that it would be quite handy to have platform-specific objects. This would give access to the entire range of devices supported by HID Manager, Linux input events, etc. - these objects should follow the same conventions as [hid] ============================================================================== = figure out whole degree issue - should degree conversion also change rotation direction and 0 point? The degrees on a compass rotate the opposite direction of radians. The 0 point of a compass is due north, with radians, its right/due east. - [hid_polar] should take an argument (in degrees?) which specifies where the 0 is on the circle ============================================================================== = mapping object ideas [hid2midi] [midi2hid] midi value + bend <-> hid - use MIDI pitch and bend data for values in between MIDI notes? object for Fletcher-Munson Equal-loudness contours median average object [infinitepot] for use with a [knob] or any single axis that could be infinite. [hid_debounce] peak finder object "kalman filters" Curves!! http://www.2dcurves.com ============================================================================== = check out using USB timestamp - use the USB timestamp to correctly space the output data /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS BUGS ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ ______________________________________________________________________________ - BUG: figure out how to prevent segfaults on mismapped devices/elements - it should gracefully ignore things where it currently segfaults - looks like its in build_device_list ______________________________________________________________________________ - BUG: multiple instances pointing to the same device don't have seperate close/free - closing the device on one instance closing that same device on all other instances of [hid] - deleting that instance also closes the device for all other instances pointing to that same device ______________________________________________________________________________ - BUG: on MacOS X, mouse axis data is limited by the screen dimensions - the axes data stops outputting when the mouse pointer reaches the edge of the screen. Hopefully the HID Manager API will allow raw mouse data access. It must since its used with games. - turn off/unlink mousepointer for that device? ______________________________________________________________________________ - 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() ______________________________________________________________________________ - BUG: hatswitches on MacOS X output an event without a change in value Because of the currnently implementation of the conversion of the MacOS X style event to the Linux style event, an event with a value of zero is output on the unchanged axis when the hatswitch is moved in along the X or Y axis (as opposed to diagonally). ______________________________________________________________________________ - BUG: on MacOS X, two keyboard key codes are reported as hatswitches abs abs_hat0x Button Input, Keyboard Usage 0x39 abs abs_hat0y Button Input, Keyboard Usage 0x39 I am pretty sure this is just a hid_print_element_list() display problem.