[PD-cvs] externals/hcs usbhid.c,1.1,1.2 usbhid-help.pd,1.1,1.2

Hans-Christoph Steiner eighthave at users.sourceforge.net
Thu May 18 18:00:48 CEST 2006


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

Modified Files:
	usbhid.c usbhid-help.pd 
Log Message:
lots of string bullshit, reports name now

Index: usbhid-help.pd
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/usbhid-help.pd,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** usbhid-help.pd	18 May 2006 12:00:47 -0000	1.1
--- usbhid-help.pd	18 May 2006 16:00:46 -0000	1.2
***************
*** 1,3 ****
! #N canvas 338 93 593 471 10;
  #X obj 111 373 usbhid;
  #X msg 125 14 bang;
--- 1,3 ----
! #N canvas 338 93 597 475 10;
  #X obj 111 373 usbhid;
  #X msg 125 14 bang;
***************
*** 11,18 ****
  #X text 233 258 GARBAGE FOR TESTING;
  #X msg 250 292 set read 1 30 word 1 31 1 38;
- #X msg 205 182 set read 1 30 1 31 12 38;
  #X msg 198 142 print;
  #X msg 177 78 open 1149 16392;
  #X text 298 78 Gravis/Destroyer Tiltpad;
  #X connect 0 0 4 0;
  #X connect 0 1 5 0;
--- 11,18 ----
  #X text 233 258 GARBAGE FOR TESTING;
  #X msg 250 292 set read 1 30 word 1 31 1 38;
  #X msg 198 142 print;
  #X msg 177 78 open 1149 16392;
  #X text 298 78 Gravis/Destroyer Tiltpad;
+ #X msg 205 182 set read 1 30 1 31;
  #X connect 0 0 4 0;
  #X connect 0 1 5 0;
***************
*** 24,26 ****
  #X connect 11 0 0 0;
  #X connect 12 0 0 0;
! #X connect 13 0 0 0;
--- 24,26 ----
  #X connect 11 0 0 0;
  #X connect 12 0 0 0;
! #X connect 14 0 0 0;

Index: usbhid.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/usbhid.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** usbhid.c	18 May 2006 12:00:47 -0000	1.1
--- usbhid.c	18 May 2006 16:00:46 -0000	1.2
***************
*** 1,5 ****
  /* --------------------------------------------------------------------------*/
  /*                                                                           */
! /* Pd interface to the USB HID API using libhid                              */
  /* Written by Hans-Christoph Steiner <hans at at.or.at>                         */
  /*                                                                           */
--- 1,5 ----
  /* --------------------------------------------------------------------------*/
  /*                                                                           */
! /* Pd interface to the USB HID API using libhid, which is built on libusb    */
  /* Written by Hans-Christoph Steiner <hans at at.or.at>                         */
  /*                                                                           */
***************
*** 35,39 ****
   */
  
! /* NOTE: included from libusb/usbi.h. UGLY, i know, but so is libusb! */
  struct usb_dev_handle {
    int fd;
--- 35,41 ----
   */
  
! /* NOTE: included from libusb/usbi.h. UGLY, i know, but so is libusb! 
!  * this struct doesn't seem to be defined in usb.h, only prototyped
!  */
  struct usb_dev_handle {
    int fd;
***************
*** 57,61 ****
  t_int usbhid_instance_count;
  
! char *hid_id[32]; /* FIXME: 32 devices MAX */
  t_int hid_id_count;
  
--- 59,64 ----
  t_int usbhid_instance_count;
  
! #define HID_ID_MAX 32
! char *hid_id[HID_ID_MAX]; /* FIXME: 32 devices MAX */
  t_int hid_id_count;
  
***************
*** 87,92 ****
  
  
- 
- 
  /*------------------------------------------------------------------------------
   * LOCAL DEFINES
--- 90,93 ----
***************
*** 101,108 ****
--- 102,113 ----
  static t_class *usbhid_class;
  
+ /* for USB strings */
+ #define STRING_BUFFER_LENGTH 256
+ 
  #define SEND_PACKET_LENGTH 1
  #define RECEIVE_PACKET_LENGTH 6
  #define PATH_LENGTH 3
  
+ 
  /*------------------------------------------------------------------------------
   * SUPPORT FUNCTIONS
***************
*** 114,118 ****
   */
  static bool device_iterator (struct usb_dev_handle const* usbdev, void* custom, 
! 					  unsigned int len)
  {
  	bool ret = false;
--- 119,123 ----
   */
  static bool device_iterator (struct usb_dev_handle const* usbdev, void* custom, 
! 					  unsigned int length)
  {
  	bool ret = false;
***************
*** 122,126 ****
  	/* only here to prevent the unused warning */
  	/* TODO remove */
! 	len = *((unsigned long*)custom);
   
  	/* Obtain the device's full path */
--- 127,131 ----
  	/* only here to prevent the unused warning */
  	/* TODO remove */
! 	length = *((unsigned long*)custom);
   
  	/* Obtain the device's full path */
***************
*** 139,147 ****
  		hid_id[i] = (char *) malloc(strlen(usbdev->device->filename) + strlen(usbdev->bus->dirname) );
  		sprintf(hid_id[i], "%s/%s", usbdev->bus->dirname, usbdev->device->filename);
- 		post("bus %s device %s: %d %d",
- 			 usbdev->bus->dirname, 
- 			 usbdev->device->filename,
- 			 usbdev->device->descriptor.idVendor,
- 			 usbdev->device->descriptor.idProduct);
  	}
  	else /* device already seen */
--- 144,147 ----
***************
*** 154,160 ****
--- 154,172 ----
  		 && usbdev->device->config
  		 && usbdev->device->config->interface->altsetting->bInterfaceClass == USB_CLASS_HID)
+ 	{
+ 		
+ 		post("bus %s device %s: %d %d",
+ 			 usbdev->bus->dirname, 
+ 			 usbdev->device->filename,
+ 			 usbdev->device->descriptor.idVendor,
+ 			 usbdev->device->descriptor.idProduct);
  		ret = true;
+ 	}
+ 	
  	else
+ 	{
  		ret = false;
+ 	}
+ 	
    
  	return ret;
***************
*** 165,175 ****
   * serial number.
   */
! /* static bool match_serial_number(struct usb_dev_handle* usbdev, void* custom, unsigned int len) */
  /* { */
  /*   bool ret; */
! /*   char* buffer = (char*)malloc(len); */
  /*   usb_get_string_simple(usbdev, usb_device(usbdev)->descriptor.iSerialNumber, */
! /*       buffer, len); */
! /*   ret = strncmp(buffer, (char*)custom, len) == 0; */
  /*   free(buffer); */
  /*   return ret; */
--- 177,187 ----
   * serial number.
   */
! /* static bool match_serial_number(struct usb_dev_handle* usbdev, void* custom, unsigned int length) */
  /* { */
  /*   bool ret; */
! /*   char* buffer = (char*)malloc(length); */
  /*   usb_get_string_simple(usbdev, usb_device(usbdev)->descriptor.iSerialNumber, */
! /*       buffer, length); */
! /*   ret = strncmp(buffer, (char*)custom, length) == 0; */
  /*   free(buffer); */
  /*   return ret; */
***************
*** 178,186 ****
  
  /* -------------------------------------------------------------------------- */
! /* static HIDInterface* get_device_by_number(t_int device_number) */
  /* { */
! /* 	HIDInterface* return_hid; */
  	
! /* 	return return_hid; */
  /* } */
  
--- 190,201 ----
  
  /* -------------------------------------------------------------------------- */
! /* static bool get_device_by_number(struct usb_dev_handle* usbdev,  */
! /* 								 void* custom,  */
! /* 								 unsigned int length)  */
  /* { */
! /* 	bool ret; */
  	
! 	
! /* 	return ret; */
  /* } */
  
***************
*** 209,212 ****
--- 224,285 ----
  
  
+ static t_int get_device_string(HIDInterface *hidif, char *device_string)
+ {
+ 	int length;
+ 	t_int ret = 0;
+ 	char buffer[STRING_BUFFER_LENGTH];
+ 	
+ 	if ( !hid_is_opened(hidif) ) 
+ 		return(0);
+ 
+ 	if (hidif->device->descriptor.iManufacturer) {
+ 		length = usb_get_string_simple(hidif->dev_handle,
+ 									hidif->device->descriptor.iManufacturer, 
+ 									buffer, 
+ 									STRING_BUFFER_LENGTH);
+ 		if (length > 0)
+ 		{
+ 			strncat(device_string, buffer, STRING_BUFFER_LENGTH - strlen(device_string));
+ 			strncat(device_string, " ",1);
+ 			ret = 1;
+ 		}
+ 		else
+ 		{
+ 			post("(unable to fetch manufacturer string)");
+ 		}
+ 	}
+ 	
+ 	if (hidif->device->descriptor.iProduct) {
+ 		length = usb_get_string_simple(hidif->dev_handle,
+ 									hidif->device->descriptor.iProduct, 
+ 									buffer, 
+ 									STRING_BUFFER_LENGTH);
+ 		if (length > 0)
+ 		{
+ 			strncat(device_string, buffer, STRING_BUFFER_LENGTH - strlen(device_string));
+ 			strncat(device_string, " ",1);
+ 			ret = 1;
+ 		}
+ 		else
+ 		{
+ 			post("(unable to fetch product string)");
+ 		}
+ 	}
+ 
+ 	if (hidif->device->descriptor.iSerialNumber) {
+ 		length = usb_get_string_simple(hidif->dev_handle,
+ 									hidif->device->descriptor.iSerialNumber, 
+ 									buffer, 
+ 									STRING_BUFFER_LENGTH);
+ 		if (length > 0)
+ 			strncat(device_string, buffer, STRING_BUFFER_LENGTH - strlen(device_string));
+ 		else
+ 			post("(unable to fetch product string)");
+ 	}
+ 	
+ 	return ret;
+ }
+ 
+ 
  /*------------------------------------------------------------------------------
   * IMPLEMENTATION                    
***************
*** 217,220 ****
--- 290,294 ----
  {
  	DEBUG(post("usbhid_open"););
+ 	char string_buffer[STRING_BUFFER_LENGTH];
  	
  	HIDInterfaceMatcher matcher = { (unsigned short)vendor_id, 
***************
*** 227,231 ****
  	{
  		x->x_hid_return = hid_force_open(x->x_hidinterface, 0, &matcher, 3);
! 		if (x->x_hid_return != HID_RET_SUCCESS) {
  			error("[usbhid] hid_force_open failed with return code %d\n", x->x_hid_return);
  		}
--- 301,311 ----
  	{
  		x->x_hid_return = hid_force_open(x->x_hidinterface, 0, &matcher, 3);
! 		if (x->x_hid_return == HID_RET_SUCCESS) 
! 		{
! 			if (get_device_string(x->x_hidinterface,string_buffer))
! 				post("[usbhid]: opened %s",string_buffer);
! 		}
! 		else
! 		{
  			error("[usbhid] hid_force_open failed with return code %d\n", x->x_hid_return);
  		}
***************
*** 240,244 ****
  	DEBUG(post("usbhid_read"););
  /* int const PATH_IN[PATH_LENGTH] = { 0xffa00001, 0xffa00002, 0xffa10003 }; */
! 	int const PATH_OUT[PATH_LENGTH] = { 0x00010030, 0x00010031, 0x00010038 };
  
  	char packet[RECEIVE_PACKET_LENGTH];
--- 320,324 ----
  	DEBUG(post("usbhid_read"););
  /* int const PATH_IN[PATH_LENGTH] = { 0xffa00001, 0xffa00002, 0xffa10003 }; */
! 	int const PATH_OUT[2] = { 0x00010030, 0x00010031 };
  
  	char packet[RECEIVE_PACKET_LENGTH];
***************
*** 252,256 ****
  		x->x_hid_return = hid_get_input_report(x->x_hidinterface, 
  											   PATH_OUT, 
! 											   PATH_LENGTH, 
  											   packet, 
  											   RECEIVE_PACKET_LENGTH);
--- 332,336 ----
  		x->x_hid_return = hid_get_input_report(x->x_hidinterface, 
  											   PATH_OUT, 
! 											   2, 
  											   packet, 
  											   RECEIVE_PACKET_LENGTH);
***************
*** 258,266 ****
  			error("[usbhid] hid_get_input_report failed with return code %d\n", 
  				  x->x_hid_return);
! /* 	} */
  }
  
  
  
  /* -------------------------------------------------------------------------- */
  /* set the HID packet for which elements to read */
--- 338,347 ----
  			error("[usbhid] hid_get_input_report failed with return code %d\n", 
  				  x->x_hid_return);
! /*  	} */
  }
  
  
  
+ 
  /* -------------------------------------------------------------------------- */
  /* set the HID packet for which elements to read */
***************
*** 328,331 ****
--- 409,414 ----
  {
  	DEBUG(post("usbhid_close"););
+ 	t_int ret;
+ 	char string_buffer[STRING_BUFFER_LENGTH];
  
  /* just to be safe, stop it first */
***************
*** 334,342 ****
  	if ( hid_is_opened(x->x_hidinterface) ) 
  	{
  		x->x_hid_return = hid_close(x->x_hidinterface);
  		if (x->x_hid_return == HID_RET_SUCCESS) 
! 			post("[usbhid] closed device %d",x->x_device_number);
  		else
  			error("[usbhid] could not close %d, error #%d",x->x_device_number,x->x_hid_return);
  	}
  }
--- 417,430 ----
  	if ( hid_is_opened(x->x_hidinterface) ) 
  	{
+ 		ret = get_device_string(x->x_hidinterface,string_buffer);
  		x->x_hid_return = hid_close(x->x_hidinterface);
  		if (x->x_hid_return == HID_RET_SUCCESS) 
! 		{
! 			if (ret) post("[usbhid]: closed %s",string_buffer);
! 		}
  		else
+ 		{
  			error("[usbhid] could not close %d, error #%d",x->x_device_number,x->x_hid_return);
+ 		}
  	}
  }
***************
*** 348,352 ****
  	DEBUG(post("usbhid_print"););
  	t_int i;
! 	t_atom event_data[3];
  
  	for ( i = 0 ; ( hid_id[i] != NULL ) ; i++ )
--- 436,441 ----
  	DEBUG(post("usbhid_print"););
  	t_int i;
! 	char string_buffer[STRING_BUFFER_LENGTH];
! /* 	t_atom event_data[3]; */
  
  	for ( i = 0 ; ( hid_id[i] != NULL ) ; i++ )
***************
*** 355,358 ****
--- 444,450 ----
  			post("hid_id[%d]: %s",i,hid_id[i]);
  	}
+ 	if (get_device_string(x->x_hidinterface,string_buffer))
+ 		post("%s is currently open",string_buffer);
+ 
  /* 	SETSYMBOL(event_data, gensym(type));	   /\* type *\/ */
  /* 	SETSYMBOL(event_data + 1, gensym(code));	/\* code *\/ */
***************
*** 413,424 ****
  	
  	/* hid_write_library_config(stdout); */
! 	/* hid_set_debug(HID_DEBUG_NOTRACES); */
! 	// hid_set_debug(HID_DEBUG_NONE);
! /* 	hid_set_debug(HID_DEBUG_ALL); */
! 	hid_set_debug_stream(stderr);
  	hid_set_usb_debug(0);
  	
  	/* data init */
! 	for (i = 0 ; i < 32 ; i++)
  		hid_id[i] = NULL;
  
--- 505,516 ----
  	
  	/* hid_write_library_config(stdout); */
! 	//hid_set_debug(HID_DEBUG_NONE);
! 	hid_set_debug(HID_DEBUG_NOTRACES);
!  	//hid_set_debug(HID_DEBUG_ALL); 
! 	hid_set_debug_stream(stdout);
  	hid_set_usb_debug(0);
  	
  	/* data init */
! 	for (i = 0 ; i < HID_ID_MAX ; i++)
  		hid_id[i] = NULL;
  





More information about the Pd-cvs mailing list