[PD-cvs] externals/hcs/hid Makefile, 1.9, 1.10 TODO, 1.18, 1.19 hid.c, 1.19, 1.20 hid.h, 1.15, 1.16 hid_darwin.c, 1.17, 1.18

Hans-Christoph Steiner eighthave at users.sourceforge.net
Fri Jun 10 22:17:45 CEST 2005


Update of /cvsroot/pure-data/externals/hcs/hid
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2687

Modified Files:
	Makefile TODO hid.c hid.h hid_darwin.c 
Log Message:

- got ff_autocenter and ff_gain working fine, now its time for some actual
  effects!!


Index: TODO
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/TODO,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** TODO	6 Jun 2005 22:39:50 -0000	1.18
--- TODO	10 Jun 2005 20:17:42 -0000	1.19
***************
*** 28,36 ****
  
  ==============================================================================
! = make second outlet for device name
! 
! just output the USB device name to the second outlet
  
! - maybe the manufacturer too?
  
  
--- 28,34 ----
  
  ==============================================================================
! = Report available FF effects
  
! - check against HID Utilities Source/PID.h
  
  

Index: hid_darwin.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid_darwin.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** hid_darwin.c	10 Jun 2005 03:45:31 -0000	1.17
--- hid_darwin.c	10 Jun 2005 20:17:42 -0000	1.18
***************
*** 44,47 ****
--- 44,48 ----
  
  #include "HID_Utilities_External.h"
+ #include "ImmrHIDUtilAddOn.h"
  
  #include <IOKit/hid/IOHIDUsageTables.h>
***************
*** 208,215 ****
  }
  
- 
  t_int hid_print_element_list(t_hid *x)
  {
! 	DEBUG(post("hid_build_element_list"););
  
  	UInt32 i;
--- 209,215 ----
  }
  
  t_int hid_print_element_list(t_hid *x)
  {
! 	DEBUG(post("hid_print_element_list"););
  
  	UInt32 i;
***************
*** 263,266 ****
--- 263,291 ----
  
  
+ void hid_ff_print( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_print"););
+ 	HRESULT result;
+ 	UInt32 value;
+ 
+ 	if ( x->x_has_ff ) 
+ 	{
+ 		result = FFDeviceGetForceFeedbackProperty( (FFDeviceObjectReference) x->x_ff_device, 
+ 																 FFPROP_AUTOCENTER, 
+ 																 &value, 
+ 																 (IOByteCount) sizeof( value ) );
+ 		if ( result == FF_OK ) post( "autocenter: %d",value );
+ 
+ 		result = FFDeviceGetForceFeedbackProperty( (FFDeviceObjectReference) x->x_ff_device, 
+ 																 FFPROP_FFGAIN, 
+ 																 &value, 
+ 																 (IOByteCount) sizeof( value ) );
+ 		if ( result == FF_OK ) post( "gain: %d", value );
+ 	}
+ 
+ //	FFEffectGetParameters(  ); 
+ }
+ 
+ 
  void hid_print_device_list(t_hid *x) 
  {
***************
*** 268,272 ****
  	t_int i,numdevs;
  	UInt32 usagePage, usage;
! 	pRecDevice pCurrentHIDDevice;
  
  	if( HIDHaveDeviceList() )
--- 293,297 ----
  	t_int i,numdevs;
  	UInt32 usagePage, usage;
! 	pRecDevice pCurrentHIDDevice = NULL;
  
  	if( HIDHaveDeviceList() )
***************
*** 309,312 ****
--- 334,470 ----
  }
  
+ /* ============================================================================== 
+  * FORCE FEEDBACK
+  * ============================================================================== */
+ 
+ /* --------------------------------------------------------------------------
+  * FF "Properties"
+  * autocenter ( 0/1 ), ffgain (overall feedback gain 0-10000)
+  */
+ 
+ t_int hid_ff_autocenter(t_hid *x, t_float value)
+ {
+ 	DEBUG(post("hid_ff_autocenter"););
+ 	HRESULT result;
+ 	UInt32 autocenter_value;
+ 
+ 	if( x->x_has_ff ) 
+ 	{
+ 		if ( value > 0 ) autocenter_value = 1;
+ 		else if ( value <= 0 ) autocenter_value = 0;
+ 		/* FFPROP_AUTOCENTER is either 0 or 1 */
+ 		result = FFDeviceSetForceFeedbackProperty( 
+ 			(FFDeviceObjectReference) x->x_ff_device, 
+ 			FFPROP_AUTOCENTER, 
+ 			&autocenter_value );
+ 		if ( result != FF_OK )
+ 		{
+ 			post("[hid]: ff_autocenter failed!");
+ 		}
+ 	}
+ 	
+ 	return(0);
+ }
+ 
+ t_int hid_ff_gain(t_hid *x, t_float value)
+ {
+ 	DEBUG(post("hid_ff_gain"););
+ 	HRESULT result;
+ 	UInt32 ffgain_value;
+ 	
+ 	if( x->x_has_ff ) 
+ 	{
+ 		if ( value > 1 ) value = 1;
+ 		else if ( value < 0 ) value = 0;
+ 		ffgain_value = value * 10000;
+ 		/* FFPROP_FFGAIN has a integer range of 0-10000 */
+ 		result = FFDeviceSetForceFeedbackProperty( 
+ 			(FFDeviceObjectReference)x->x_ff_device, FFPROP_FFGAIN, &ffgain_value );
+ 		if ( result != FF_OK )
+ 		{
+ 			post("[hid]: ff_gain failed!");
+ 		}
+ 	}
+ 	
+ 	return(0);
+ }
+ 
+ /* --------------------------------------------------------------------------
+  * FF "Commands"
+  * continue, pause, reset, setactuatorsoff, setactuatorson, stopall
+  */
+ 
+ t_int hid_ff_send_ff_command (t_hid *x, UInt32 ff_command)
+ {
+ 	HRESULT result = 0;
+ 
+ 	if( x->x_has_ff ) 
+ 	{
+ 		result = FFDeviceSendForceFeedbackCommand( x->x_ff_device, ff_command );
+ 	}
+ 
+ 	return ( (t_int) result );
+ }
+ 
+ t_int hid_ff_continue( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_continue"););
+ 	return(  hid_ff_send_ff_command( x, FFSFFC_CONTINUE ) );
+ }
+ 
+ t_int hid_ff_pause( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_pause"););
+ 	return(  hid_ff_send_ff_command( x, FFSFFC_PAUSE ) );
+ }
+ 
+ t_int hid_ff_reset( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_reset"););
+ 	return(  hid_ff_send_ff_command( x, FFSFFC_RESET ) );
+ }
+ 
+ t_int hid_ff_setactuatorsoff( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_setactuatorsoff"););
+ 	return(  hid_ff_send_ff_command( x, FFSFFC_SETACTUATORSOFF ) );
+ }
+ 
+ t_int hid_ff_setactuatorson( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_setactuatorson"););
+ 	return(  hid_ff_send_ff_command( x, FFSFFC_SETACTUATORSON ) );
+ }
+ 
+ t_int hid_ff_stopall( t_hid *x )
+ {
+ 	DEBUG(post("hid_ff_stopall"););
+ 	return(  hid_ff_send_ff_command( x, FFSFFC_STOPALL ) );
+ }
+ 
+ t_int hid_ff_motors( t_hid *x, t_float value )
+ {
+ 	if ( value > 0 ) 
+ 	{
+ 		return ( hid_ff_setactuatorson( x )  );
+ 	}
+ 	else
+ 	{
+ 		return ( hid_ff_setactuatorsoff( x )  );
+ 	}
+ }
+ 
+ 
+ /* --------------------------------------------------------------------------
+  * FF test functions
+  */
+ 
+ t_int hid_ff_fftest ( t_hid *x, t_float value)
+ {
+ 	DEBUG(post("hid_get_events"););
+ 	
+ 	return( 0 );
+ }
+ 
  /* ============================================================================== */
  /* Pd [hid] FUNCTIONS */
***************
*** 472,476 ****
  
  	io_service_t hidDevice = NULL;
! 	FFDeviceObjectReference *pDeviceReference = NULL;
  
  /* rebuild device list to make sure the list is current */
--- 630,634 ----
  
  	io_service_t hidDevice = NULL;
! 	FFDeviceObjectReference ffDeviceReference = NULL;
  
  /* rebuild device list to make sure the list is current */
***************
*** 500,509 ****
  	hid_build_element_list(x);
  
  	if ( FFIsForceFeedback(hidDevice) == FF_OK ) 
  	{
! 		post("device has Force Feedback support");
! 		if ( FFCreateDevice(hidDevice,pDeviceReference) == FF_OK ) 
  		{
! 			post("created FF device");
  		}
  	}
--- 658,675 ----
  	hid_build_element_list(x);
  
+ 	hidDevice = AllocateHIDObjectFromRecDevice( pCurrentHIDDevice );
  	if ( FFIsForceFeedback(hidDevice) == FF_OK ) 
  	{
! 		post("\tdevice has Force Feedback support");
! 		if ( FFCreateDevice(hidDevice,&ffDeviceReference) == FF_OK ) 
  		{
! 			x->x_has_ff = 1;
! 			x->x_ff_device = ffDeviceReference;
! 		}
! 		else
! 		{
! 			x->x_has_ff = 0;
! 			post("[hid]: FF device creation failed!");
! 			return( -1 );
  		}
  	}
***************
*** 549,553 ****
  	while ( pCurrentHIDDevice != NULL )
  	{
! 		hid_output_device_name( x, pCurrentHIDDevice->manufacturer, pCurrentHIDDevice->product );
  		pCurrentHIDDevice = HIDGetNextDevice(pCurrentHIDDevice);
  	} 
--- 715,720 ----
  	while ( pCurrentHIDDevice != NULL )
  	{
! 		hid_output_device_name( x, pCurrentHIDDevice->manufacturer, 
! 										pCurrentHIDDevice->product );
  		pCurrentHIDDevice = HIDGetNextDevice(pCurrentHIDDevice);
  	} 
***************
*** 561,566 ****
  	hid_print_device_list(x);
  	
! 	if(x->x_device_open)
  		hid_print_element_list(x);
  }
  
--- 728,736 ----
  	hid_print_device_list(x);
  	
! 	if(x->x_device_open) 
! 	{
  		hid_print_element_list(x);
+ 		hid_ff_print( x );
+ 	}
  }
  

Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/Makefile,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** Makefile	6 Jun 2005 22:39:50 -0000	1.9
--- Makefile	10 Jun 2005 20:17:42 -0000	1.10
***************
*** 22,26 ****
  .SUFFIXES: .pd_darwin
  
! all: input_arrays pd_darwin
  pd_darwin: hid.pd_darwin
  
--- 22,26 ----
  .SUFFIXES: .pd_darwin
  
! all: input_arrays hid_utilities pd_darwin
  pd_darwin: hid.pd_darwin
  
***************
*** 32,38 ****
  
  # generic optimization
! OPT_FLAGS = -O3
! # G4 7450 optimization  (gives errors)
! #OPT_FLAGS = -fast -mcpu=7450 -maltivec
  
  CFLAGS = $(OPT_FLAGS) -Wall -W -Wno-shadow -Wstrict-prototypes -Wno-unused
--- 32,40 ----
  
  # generic optimization
! #OPT_FLAGS = -O3 -ffast-math
! # G4 optimization
! OPT_FLAGS = -O3 -mcpu=7400 -faltivec -ffast-math -fPIC
! # faster G4 7450 optimization  (gives errors)
! #OPT_FLAGS = -ffast -mcpu=7450 -faltivec -ffast-math -fPIC
  
  CFLAGS = $(OPT_FLAGS) -Wall -W -Wno-shadow -Wstrict-prototypes -Wno-unused
***************
*** 49,57 ****
  	ld $(LDFLAGS) -o $*.pd_linux *.o -lc -lm
  	strip --strip-unneeded $*.pd_linux
- #	rm $*.o
  
  input_arrays:
! 	./make-arrays-from-input.h.pl
  
  
  clean: ; rm -f *.pd_* *.o *~ input_arrays.? doc/ev*-list.pd
--- 51,61 ----
  	ld $(LDFLAGS) -o $*.pd_linux *.o -lc -lm
  	strip --strip-unneeded $*.pd_linux
  
  input_arrays:
! 	test -f input_arrays.h || ./make-arrays-from-input.h.pl
  
+ hid_utilities:
+ 	test -f ./HID\ Utilities\ Source/build/libHIDUtilities.a || \
+ 		( cd  ./HID\ Utilities\ Source && pbxbuild )
  
  clean: ; rm -f *.pd_* *.o *~ input_arrays.? doc/ev*-list.pd

Index: hid.h
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** hid.h	6 Jun 2005 22:39:50 -0000	1.15
--- hid.h	10 Jun 2005 20:17:42 -0000	1.16
***************
*** 27,30 ****
--- 27,32 ----
  		t_int               x_fd;
  		t_int               x_device_number;
+ 		t_int               x_has_ff;
+ 		void                *x_ff_device;
  		t_clock             *x_clock;
  		t_int               x_delay;
***************
*** 59,71 ****
  
  /* support functions */
! void hid_output_event(t_hid *x, char *type, char *code, t_float value);
  
- /* generic, cross-platform functions */
- t_int hid_open_device(t_hid *x, t_int device_number);
- t_int hid_close_device(t_hid *x);
- t_int hid_build_device_list(t_hid* x);
- t_int hid_get_events(t_hid *x) ;
- void hid_print(t_hid* x);
- void hid_platform_specific_free(t_hid *x);
  
  #endif  /* #ifndef _HID_H */
--- 61,93 ----
  
  /* support functions */
! void hid_output_event( t_hid *x, char *type, char *code, t_float value );
! 
! /* generic, cross-platform functions implemented in a separate file for each
!  * platform 
!  */
! t_int hid_open_device( t_hid *x, t_int device_number );
! t_int hid_close_device( t_hid *x );
! t_int hid_build_device_list( t_hid* x );
! t_int hid_get_events( t_hid *x ) ;
! void hid_print( t_hid* x );
! void hid_platform_specific_free( t_hid *x );
! 
! /* cross-platform force feedback functions */
! t_int hid_ff_autocenter( t_hid *x, t_float value );
! t_int hid_ff_gain( t_hid *x, t_float value );
! t_int hid_ff_motors( t_hid *x, t_float value );
! t_int hid_ff_continue( t_hid *x );
! t_int hid_ff_pause( t_hid *x );
! t_int hid_ff_reset( t_hid *x );
! t_int hid_ff_stopall( t_hid *x );
! // these are just for testing...
! t_int hid_ff_fftest ( t_hid *x, t_float value);
! 
! #include "HID_Utilities_External.h"
! void hid_ff_print( t_hid *x );
! 
! 
! 
  
  
  #endif  /* #ifndef _HID_H */

Index: hid.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** hid.c	6 Jun 2005 22:39:50 -0000	1.19
--- hid.c	10 Jun 2005 20:17:42 -0000	1.20
***************
*** 239,242 ****
--- 239,243 ----
  
    /* init vars */
+   x->x_has_ff = 0;
    x->x_device_open = 0;
    x->x_started = 0;
***************
*** 286,289 ****
--- 287,302 ----
  	class_addmethod(hid_class,(t_method) hid_stop,gensym("stop"),0);
  	class_addmethod(hid_class,(t_method) hid_stop,gensym("nopoll"),0);
+    /* force feedback messages */
+ 	class_addmethod(hid_class,(t_method) hid_ff_autocenter,
+ 						 gensym("ff_autocenter"),A_DEFFLOAT,0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_gain,gensym("ff_gain"),A_DEFFLOAT,0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_motors,gensym("ff_motors"),A_DEFFLOAT,0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_continue,gensym("ff_continue"),0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_pause,gensym("ff_pause"),0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_reset,gensym("ff_reset"),0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_stopall,gensym("ff_stopall"),0);
+ 	/* ff tests */
+ 	class_addmethod(hid_class,(t_method) hid_ff_fftest,gensym("fftest"),A_DEFFLOAT,0);
+ 	class_addmethod(hid_class,(t_method) hid_ff_print,gensym("ff_print"),0);
  }
  





More information about the Pd-cvs mailing list