[PD-cvs] externals/hcs/hid hid_linux.c,NONE,1.1 Makefile,1.3,1.4 hid.c,1.4,1.5 hid.h,1.1,1.2 hid_darwin.c,1.1,1.2 make-arrays-from-input.h.pl,1.3,1.4

Hans-Christoph Steiner eighthave at users.sourceforge.net
Fri Oct 22 20:49:18 CEST 2004


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

Modified Files:
	Makefile hid.c hid.h hid_darwin.c make-arrays-from-input.h.pl 
Added Files:
	hid_linux.c 
Log Message:
more progress generalizing for cross-platformness; Darwin stuff compiles and the object loads, but it doesn't do anything yet

Index: hid_darwin.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid_darwin.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** hid_darwin.c	22 Oct 2004 05:43:17 -0000	1.1
--- hid_darwin.c	22 Oct 2004 18:49:16 -0000	1.2
***************
*** 1,2 ****
--- 1,3 ----
+ #ifdef __APPLE__
  /*
   *  Apple Darwin HID Manager support for [hid]
***************
*** 21,24 ****
--- 22,27 ----
  
   */
+ 
+ 
  #include <Carbon/Carbon.h>
  
***************
*** 54,63 ****
  */
  
  int gNumberOfHIDDevices = 0;
  EventLoopTimerRef gTimer = NULL; // timer for element data updates
  
  
! void releaseHIDDevices ()
  {
  	if (gTimer)
      {    
--- 57,81 ----
  */
  
+ 
+ #define DEBUG(x)
+ //#define DEBUG(x) x 
+ 
+ /*==============================================================================
+  *  GLOBAL VARS
+  *======================================================================== */
+ 
  int gNumberOfHIDDevices = 0;
  EventLoopTimerRef gTimer = NULL; // timer for element data updates
  
  
! /*==============================================================================
!  *  FUNCTIONS
!  *==============================================================================
!  */
! 
! void releaseHIDDevices (void)
  {
+ 	DEBUG(post("releaseHIDDevices"););
+ 
  	if (gTimer)
      {    
***************
*** 70,83 ****
  }
  
! int prHIDBuildElementList()
  {
  /*
  	PyrSlot *a = g->sp - 1; //class
  	PyrSlot *b = g->sp; //locID device
  */
! 	int i, locID, cookieNum;
  	pRecElement	devElement;
  	pRecDevice pCurrentHIDDevice;
! //	int err;
  
  //	int err = slotIntVal(b, &locID);
--- 88,106 ----
  }
  
! int prHIDBuildElementList(void)
  {
+ 	DEBUG(post("prHIDBuildElementList"););
+ 
  /*
  	PyrSlot *a = g->sp - 1; //class
  	PyrSlot *b = g->sp; //locID device
  */
! 	int locID = NULL;
! 	int cookieNum = NULL;
! 	UInt32 i;
  	pRecElement	devElement;
  	pRecDevice pCurrentHIDDevice;
! 	UInt32 numElements;
! 	char cstrElementName [256];
  
  //	int err = slotIntVal(b, &locID);
***************
*** 91,95 ****
  	
  	devElement =  HIDGetFirstDeviceElement (pCurrentHIDDevice, kHIDElementTypeInput);
! 	UInt32 numElements = HIDCountDeviceElements (pCurrentHIDDevice, kHIDElementTypeInput);
  
  	//PyrObject* devAllElementsArray = newPyrArray(g->gc, numElements * sizeof(PyrObject), 0 , true);
--- 114,118 ----
  	
  	devElement =  HIDGetFirstDeviceElement (pCurrentHIDDevice, kHIDElementTypeInput);
! 	numElements = HIDCountDeviceElements (pCurrentHIDDevice, kHIDElementTypeInput);
  
  	//PyrObject* devAllElementsArray = newPyrArray(g->gc, numElements * sizeof(PyrObject), 0 , true);
***************
*** 97,101 ****
  		for(i=0; i<numElements; i++)
  		{
- 			char cstrElementName [256];
  			//PyrObject* devElementArray = newPyrArray(g->gc, 5 * sizeof(PyrObject), 0 , true);
  			HIDGetTypeName((IOHIDElementType) devElement->type, cstrElementName);
--- 120,123 ----
***************
*** 123,128 ****
  }
  
! int prHIDBuildDeviceList()
  {
  	int i,err;
  	UInt32 usagePage, usage;
--- 145,152 ----
  }
  
! int prHIDBuildDeviceList(void)
  {
+ 	DEBUG(post("prHIDBuildDeviceList"););
+ 
  	int i,err;
  	UInt32 usagePage, usage;
***************
*** 211,254 ****
  }
  
! /*
! int prHIDGetValue(VMGlobals *g);
! int prHIDGetValue(VMGlobals *g)
  {
  	PyrSlot *a = g->sp - 2; //class
  	PyrSlot *b = g->sp - 1; //locID device
  	PyrSlot *c = g->sp; //element cookie
- 	int locID, cookieNum;
  	int err = slotIntVal(b, &locID);
  	if (err) return err;
  	err = slotIntVal(c, &cookieNum);
  	if (err) return err;
  	IOHIDElementCookie cookie = (IOHIDElementCookie) cookieNum;
  	// look for the right device: 
!     pRecDevice  pCurrentHIDDevice = HIDGetFirstDevice ();
  	while (pCurrentHIDDevice && (pCurrentHIDDevice->locID !=locID))
!         pCurrentHIDDevice = HIDGetNextDevice (pCurrentHIDDevice);
  	if(!pCurrentHIDDevice) return (1);
  	// look for the right element:
  	pRecElement pCurrentHIDElement =  HIDGetFirstDeviceElement (pCurrentHIDDevice, kHIDElementTypeIO);
  	// use gElementCookie to find current element
!     while (pCurrentHIDElement && (pCurrentHIDElement->cookie != cookie))
!         pCurrentHIDElement = HIDGetNextDeviceElement (pCurrentHIDElement, kHIDElementTypeIO);
! 		
  	if (pCurrentHIDElement)
!     {
! 		SInt32 value = HIDGetElementValue (pCurrentHIDDevice, pCurrentHIDElement);
! 		 // if it's not a button and it's not a hatswitch then calibrate
  		if(( pCurrentHIDElement->type != kIOHIDElementTypeInput_Button ) &&
  			( pCurrentHIDElement->usagePage == 0x01 && pCurrentHIDElement->usage != kHIDUsage_GD_Hatswitch)) 
  			value = HIDCalibrateValue ( value, pCurrentHIDElement );
! 		SetInt(a, value);
  	}
! 	else SetNil(a);
  	return (0);	
  	
  }
! */
! void PushQueueEvents_RawValue ()
  {
  	int i;
  	
--- 235,286 ----
  }
  
! 
! int prHIDGetValue(void)
  {
+ 	DEBUG(post("prHIDGetValue"););
+ 
+ 	int locID = NULL; 
+ 	int cookieNum = NULL;
+ 	SInt32 value;
+ 	/*
  	PyrSlot *a = g->sp - 2; //class
  	PyrSlot *b = g->sp - 1; //locID device
  	PyrSlot *c = g->sp; //element cookie
  	int err = slotIntVal(b, &locID);
  	if (err) return err;
  	err = slotIntVal(c, &cookieNum);
  	if (err) return err;
+ 	*/
  	IOHIDElementCookie cookie = (IOHIDElementCookie) cookieNum;
  	// look for the right device: 
! 	pRecDevice  pCurrentHIDDevice = HIDGetFirstDevice ();
  	while (pCurrentHIDDevice && (pCurrentHIDDevice->locID !=locID))
! 		pCurrentHIDDevice = HIDGetNextDevice (pCurrentHIDDevice);
  	if(!pCurrentHIDDevice) return (1);
  	// look for the right element:
  	pRecElement pCurrentHIDElement =  HIDGetFirstDeviceElement (pCurrentHIDDevice, kHIDElementTypeIO);
  	// use gElementCookie to find current element
! 	while (pCurrentHIDElement && (pCurrentHIDElement->cookie != cookie))
! 		pCurrentHIDElement = HIDGetNextDeviceElement (pCurrentHIDElement, kHIDElementTypeIO);
! 	
  	if (pCurrentHIDElement)
! 	{
! 		value = HIDGetElementValue (pCurrentHIDDevice, pCurrentHIDElement);
! 		// if it's not a button and it's not a hatswitch then calibrate
  		if(( pCurrentHIDElement->type != kIOHIDElementTypeInput_Button ) &&
  			( pCurrentHIDElement->usagePage == 0x01 && pCurrentHIDElement->usage != kHIDUsage_GD_Hatswitch)) 
  			value = HIDCalibrateValue ( value, pCurrentHIDElement );
! 		//SetInt(a, value);
  	}
! 	//else SetNil(a);
  	return (0);	
  	
  }
! 
! 
! void PushQueueEvents_RawValue(void)
  {
+ 	DEBUG(post("PushQueueEvents_RawValue"););
+ 
  	int i;
  	
***************
*** 278,283 ****
  }
  
! void PushQueueEvents_CalibratedValue ()
  {
  	int i;
  	
--- 310,318 ----
  }
  
! 
! void PushQueueEvents_CalibratedValue(void)
  {
+ 	DEBUG(post("PushQueueEvents_CalibratedValue"););
+ 
  	int i;
  	
***************
*** 319,336 ****
  }
  
! static pascal void IdleTimer (EventLoopTimerRef inTimer, void* userData)
  {
  	#pragma unused (inTimer, userData)
  	PushQueueEvents_CalibratedValue ();
  }
  
! int prHIDReleaseDeviceList()
  {
  	releaseHIDDevices();
  	return (0);	
  }
  
! static EventLoopTimerUPP GetTimerUPP (void)
  {
  	static EventLoopTimerUPP	sTimerUPP = NULL;
  	
--- 354,380 ----
  }
  
! 
! static pascal void IdleTimer(EventLoopTimerRef inTimer, void* userData)
  {
+ 	DEBUG(post("IdleTimer"););
+ 
  	#pragma unused (inTimer, userData)
  	PushQueueEvents_CalibratedValue ();
  }
  
! 
! int prHIDReleaseDeviceList(void)
  {
+ 	DEBUG(post("prHIDReleaseDeviceList"););
+ 
  	releaseHIDDevices();
  	return (0);	
  }
  
! 
! static EventLoopTimerUPP GetTimerUPP(void)
  {
+ 	DEBUG(post("GetTimerUPP"););
+ 
  	static EventLoopTimerUPP	sTimerUPP = NULL;
  	
***************
*** 351,359 ****
  }
  */
! /* 
! int prHIDRunEventLoop(VMGlobals *g);
! int prHIDRunEventLoop(VMGlobals *g)
  {
! 	PyrSlot *a = g->sp - 1; //class
  
  	InstallEventLoopTimer (GetCurrentEventLoop(), 0, 0.001, GetTimerUPP (), 0, &gTimer);
--- 395,404 ----
  }
  */
! 
! int prHIDRunEventLoop(void)
  {
! 	DEBUG(post("prHIDRunEventLoop"););
! 
! 	//PyrSlot *a = g->sp - 1; //class
  
  	InstallEventLoopTimer (GetCurrentEventLoop(), 0, 0.001, GetTimerUPP (), 0, &gTimer);
***************
*** 362,370 ****
  	return (0);	
  }
- */
  
! int prHIDQueueDevice()
  {
! 	int locID, cookieNum;
  	
  	//PyrSlot *a = g->sp - 1; //class
--- 407,418 ----
  	return (0);	
  }
  
! 
! int prHIDQueueDevice(void)
  {
! 	DEBUG(post("prHIDQueueDevice"););
! 
! 	int locID = NULL;
! 	int cookieNum = NULL;
  	
  	//PyrSlot *a = g->sp - 1; //class
***************
*** 381,387 ****
  }
  
! int prHIDQueueElement()
  {
! 	int locID, cookieNum;
  	
  	//PyrSlot *a = g->sp - 2; //class
--- 429,439 ----
  }
  
! 
! int prHIDQueueElement(void)
  {
! 	DEBUG(post("prHIDQueueElement"););
! 
! 	int locID = NULL;
! 	int cookieNum = NULL;
  	
  	//PyrSlot *a = g->sp - 2; //class
***************
*** 408,414 ****
  }
  
! int prHIDDequeueElement()
  {
! 	int locID, cookieNum;
  	
  	//PyrSlot *a = g->sp - 2; //class
--- 460,470 ----
  }
  
! 
! int prHIDDequeueElement(void)
  {
! 	DEBUG(post("prHIDDequeueElement"););
! 
! 	int locID = NULL;
! 	int cookieNum = NULL;
  	
  	//PyrSlot *a = g->sp - 2; //class
***************
*** 434,440 ****
  }
  
! int prHIDDequeueDevice()
  {
! 	int locID, cookieNum;
  	
  	/*
--- 490,500 ----
  }
  
! 
! int prHIDDequeueDevice(void)
  {
! 	DEBUG(post("prHIDDequeueDevice"););
! 
! 	int locID = NULL;
! 	int cookieNum = NULL;
  	
  	/*
***************
*** 453,458 ****
  }
  
! int prHIDStopEventLoop()
  {
  	if (gTimer)
          RemoveEventLoopTimer(gTimer);
--- 513,521 ----
  }
  
! 
! int prHIDStopEventLoop(void)
  {
+ 	DEBUG(post("prHIDStopEventLoop"););
+ 
  	if (gTimer)
          RemoveEventLoopTimer(gTimer);
***************
*** 462,463 ****
--- 525,527 ----
  
  
+ #endif  /* #ifdef __APPLE__ */

Index: make-arrays-from-input.h.pl
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/make-arrays-from-input.h.pl,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** make-arrays-from-input.h.pl	20 Oct 2004 02:55:12 -0000	1.3
--- make-arrays-from-input.h.pl	22 Oct 2004 18:49:16 -0000	1.4
***************
*** 31,34 ****
--- 31,43 ----
  
  #------------------------------------------------------------------------
+ # declare each array in the header
+ #
+ sub printCArrayDeclarations
+ {
+ 	 my @arrayToPrint = @_;
+ 	 print(HEADER "char *${arrayToPrint[0]}[$#arrayToPrint];\n");
+ }
+ 
+ #------------------------------------------------------------------------
  # print an array out in C format
  #
***************
*** 39,55 ****
  #	 print("$arrayToPrint[0] $#arrayToPrint \n");
  
! 	 print("int ${arrayToPrint[0]}_total = $#arrayToPrint;  /* # of elements in array */\n");
! 	 print("char *${arrayToPrint[0]}[$#arrayToPrint] = {");
  
  	 for($i = 1; $i < $#arrayToPrint; $i++)
  	 {
  		  # format nicely in sets of 6
! 		  if ( ($i+4)%6 == 5 ) { print("\n       "); }
  		  # if the array element's data is null, print NULL
! 		  if ($arrayToPrint[$i]) { print("\"$arrayToPrint[$i]\","); }
! 		  else { print("NULL,"); }
  	 }
  
! 	 print("\"$arrayToPrint[$#arrayToPrint]\"\n };\n\n\n");
  }
  
--- 48,64 ----
  #	 print("$arrayToPrint[0] $#arrayToPrint \n");
  
! 	 print(ARRAYS "int ${arrayToPrint[0]}_total = $#arrayToPrint;  /* # of elements in array */\n");
! 	 print(ARRAYS "char *${arrayToPrint[0]}[$#arrayToPrint] = {");
  
  	 for($i = 1; $i < $#arrayToPrint; $i++)
  	 {
  		  # format nicely in sets of 6
! 		  if ( ($i+4)%6 == 5 ) { print(ARRAYS "\n       "); }
  		  # if the array element's data is null, print NULL
! 		  if ($arrayToPrint[$i]) { print(ARRAYS "\"$arrayToPrint[$i]\","); }
! 		  else { print(ARRAYS "NULL,"); }
  	 }
  
! 	 print(ARRAYS "\"$arrayToPrint[$#arrayToPrint]\"\n };\n\n\n");
  }
  
***************
*** 87,90 ****
--- 96,109 ----
  }
  
+ #------------------------------------------------------------------------
+ # 
+ #
+ sub printArray
+ {
+ 	 printPdFile(@_);
+ 	 printCArray(@_);
+ 	 printCArrayDeclarations(@_);
+ }
+ 
  #========================================================================
  # MAIN
***************
*** 96,102 ****
  
  # output files
! $ARRAYSFILENAME = "input_arrays.h";
  open(ARRAYS, ">$ARRAYSFILENAME");
  
  while (<INPUT_H>)
  {
--- 115,126 ----
  
  # output files
! $HEADERFILENAME = "input_arrays.h";
! open(HEADER, ">$HEADERFILENAME");
! $ARRAYSFILENAME = "input_arrays.c";
  open(ARRAYS, ">$ARRAYSFILENAME");
  
+ 
+ #----------------------------------------
+ # create the arrays from INPUT_H
  while (<INPUT_H>)
  {
***************
*** 130,171 ****
  }
  
! # generate a .pd file for each array
! printPdFile("ev", at EV);
! printPdFile("ev_syn", at SYN);
! printPdFile("ev_key", at KEY);
! printPdFile("ev_rel", at REL);
! printPdFile("ev_abs", at ABS);
! printPdFile("ev_msc", at MSC);
! printPdFile("ev_led", at LED);
! printPdFile("ev_snd", at SND);
! printPdFile("ev_rep", at REP);
! printPdFile("ev_ff", at FF);
! # there doesn't seem to be any PWR events yet...
! #printPdFile("pwr", at PWR);
! printPdFile("ev_ff_status", at FF_STATUS);
  
  # generate a C array for each array and stick them all in the same file
! select ARRAYS;
! printCArray("ev", at EV);
! printCArray("ev_syn", at SYN);
! printCArray("ev_key", at KEY);
! printCArray("ev_rel", at REL);
! printCArray("ev_abs", at ABS);
! printCArray("ev_msc", at MSC);
! printCArray("ev_led", at LED);
! printCArray("ev_snd", at SND);
! printCArray("ev_rep", at REP);
! printCArray("ev_ff", at FF);
  # there doesn't seem to be any PWR events yet...
! #printCArray("pwr", at PWR);
! print("char *ev_pwr[1] = { NULL };\n\n");
! printCArray("ev_ff_status", at FF_STATUS);
  
  # print array of arrays
! print("char **event_names[",$#EV+1,"] = {");
  for($i = 0; $i < $#EV; $i++)
  {
  	 # format nicely in sets of 6
! 	 if ( ($i+4)%6 == 5 ) { print("\n       "); }
  
  	 # if the array element's data is null, print NULL
--- 154,190 ----
  }
  
! #----------------------------------------
! # create the files from the arrays
! 
! # print file headers
! print(ARRAYS "#include \"hid.h\"\n\n");
! 
! print(HEADER "\#ifndef _INPUT_ARRAYS_H\n");
! print(HEADER "\#define _INPUT_ARRAYS_H\n\n\n");
  
  # generate a C array for each array and stick them all in the same file
! printArray("ev", at EV);
! printArray("ev_syn", at SYN);
! printArray("ev_key", at KEY);
! printArray("ev_rel", at REL);
! printArray("ev_abs", at ABS);
! printArray("ev_msc", at MSC);
! printArray("ev_led", at LED);
! printArray("ev_snd", at SND);
! printArray("ev_rep", at REP);
! printArray("ev_ff", at FF);
  # there doesn't seem to be any PWR events yet...
! #printArray("pwr", at PWR);
! print(ARRAYS "char *ev_pwr[1] = { NULL };\n\n");
! print(HEADER "char *ev_pwr[1];\n");
! #
! printArray("ev_ff_status", at FF_STATUS);
  
  # print array of arrays
! print(ARRAYS "char **event_names[",$#EV+1,"] = {");
  for($i = 0; $i < $#EV; $i++)
  {
  	 # format nicely in sets of 6
! 	 if ( ($i+4)%6 == 5 ) { print(ARRAYS "\n       "); }
  
  	 # if the array element's data is null, print NULL
***************
*** 174,200 ****
  		  $_ = $EV[$i];
  		  m/(ev_[a-z_]+)/;
! 		  print("$1,");  
  	 }
! 	 else { print("NULL,"); }
  }
  $_ = $EV[$#EV];
  m/(ev_[a-z_]+)/;
! print("$1\n };\n");
! 
  
! # print "EV: $#EV \n";
! # print "SYN: $#SYN \n";
! # print "KEY: $#KEY \n";
! # print "REL: $#REL \n";
! # print "ABS: $#ABS \n";
! # print "MSC: $#MSC \n";
! # print "LED: $#LED \n";
! # print "SND: $#SND \n";
! # print "REP: $#REP \n";
! # print "FF: $#FF \n";
! # #print "PWR: $#PWR \n";
! # print "FF_STATUS: $#FF_STATUS \n";
  
  close(ARRAYS);
  close(INPUT_H);
  
--- 193,209 ----
  		  $_ = $EV[$i];
  		  m/(ev_[a-z_]+)/;
! 		  print(ARRAYS "$1,");  
  	 }
! 	 else { print(ARRAYS "NULL,"); }
  }
  $_ = $EV[$#EV];
  m/(ev_[a-z_]+)/;
! print(ARRAYS "$1\n };\n");
  
! # print file footers
! print(HEADER "\n\n\#endif  /* #ifndef _INPUT_ARRAYS_H */\n");
  
  close(ARRAYS);
+ close(HEADER);
  close(INPUT_H);
  

--- NEW FILE: hid_linux.c ---
#ifdef __linux__

#include <linux/input.h>


#define DEBUG(x)
//#define DEBUG(x) x 





/*------------------------------------------------------------------------------
 * from evtest.c from the ff-utils package
 */

#define BITS_PER_LONG (sizeof(long) * 8)
#define NBITS(x) ((((x)-1)/BITS_PER_LONG)+1)
#define OFF(x)  ((x)%BITS_PER_LONG)
#define BIT(x)  (1UL<<OFF(x))
#define LONG(x) ((x)/BITS_PER_LONG)
#define test_bit(bit, array)	((array[LONG(bit)] >> OFF(bit)) & 1)




#endif  /* #ifdef __linux__ */

Index: hid.c
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** hid.c	22 Oct 2004 05:43:17 -0000	1.4
--- hid.c	22 Oct 2004 18:49:16 -0000	1.5
***************
*** 1,5 ****
  /* ---------------------------------------------------------------------------- */
  /*                                                                              */
! /* MacOS X object to use HIDs (Human Interface Devices                          */
  /* Written by Hans-Christoph Steiner <hans at at.or.at>                            */
  /*                                                                              */
--- 1,5 ----
  /* ---------------------------------------------------------------------------- */
  /*                                                                              */
! /* MacOS X object to use HIDs (Human Interface Devices)                         */
  /* Written by Hans-Christoph Steiner <hans at at.or.at>                            */
  /*                                                                              */
***************
*** 22,30 ****
  /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
  /*                                                                              */
- /* Based on PureData by Miller Puckette and others.                             */
- /*                                                                              */
  /* ---------------------------------------------------------------------------- */
  
  #include "hid.h"
  #include "../linuxhid.h"
  
--- 22,30 ----
  /* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.  */
  /*                                                                              */
  /* ---------------------------------------------------------------------------- */
  
  #include "hid.h"
+ 
+ #include "input_arrays.h"
  #include "../linuxhid.h"
  
***************
*** 33,40 ****
--- 33,47 ----
   */
  
+ void hid_devicelist_refresh(t_hid* x)
+ {
+ 	/* the device list should be refreshed here */
+ }
+ 
+ 
  void hid_stop(t_hid* x) 
  {
    DEBUG(post("hid_stop"););
    
+ #ifdef __linux__  
    if (x->x_fd >= 0 && x->x_started) 
    { 
***************
*** 43,46 ****
--- 50,58 ----
  	  x->x_started = 0;
    }
+ #elif __APPLE__
+   prHIDStopEventLoop();
+ #endif
+ 
+   hid_devicelist_refresh(x);
  }
  
***************
*** 61,76 ****
  static t_int hid_open(t_hid *x, t_symbol *s) 
  {
  	t_int eventType, eventCode;
  	char *eventTypeName = "";
- #ifdef __linux__
- 	struct input_event hid_input_event;
- #endif
  	/* counts for various event types */
  	t_int synCount,keyCount,relCount,absCount,mscCount,ledCount,sndCount,repCount,ffCount,pwrCount,ff_statusCount;
  #ifdef __gnu_linux__
!   unsigned long bitmask[EV_MAX][NBITS(KEY_MAX)];
  #endif
!   char devicename[256] = "Unknown";
!   DEBUG(post("hid_open");)
  
    hid_close(x);
--- 73,87 ----
  static t_int hid_open(t_hid *x, t_symbol *s) 
  {
+ 	DEBUG(post("hid_open"););
+ 	
  	t_int eventType, eventCode;
  	char *eventTypeName = "";
  	/* counts for various event types */
  	t_int synCount,keyCount,relCount,absCount,mscCount,ledCount,sndCount,repCount,ffCount,pwrCount,ff_statusCount;
  #ifdef __gnu_linux__
! 	struct input_event hid_input_event;
! 	unsigned long bitmask[EV_MAX][NBITS(KEY_MAX)];
  #endif
! 	char devicename[256] = "Unknown";
  
    hid_close(x);
***************
*** 201,205 ****
  static t_int hid_read(t_hid *x,int fd) 
  {
! 	t_atom event_data[5];
  	char *eventType;
  	char *eventCode;
--- 212,216 ----
  static t_int hid_read(t_hid *x,int fd) 
  {
! 	t_atom event_data[5];  /* this should probably be 4, not 5 */
  	char *eventType;
  	char *eventCode;
***************
*** 218,233 ****
  		outlet_anything(x->x_obj.te_outlet,atom_gensym(event_data),3,event_data+1); 
  	}
! #endif /* #ifdef__gnu_linux__ */
! #ifdef IGNOREIGNOREIGNORE
! 	pRecDevice pCurrentHIDDevice = GetSetCurrentDevice (gWindow);
! 	pRecElement pCurrentHIDElement = GetSetCurrenstElement (gWindow);
  
! 	// if we have a good device and element which is not a collecion
! 	if (pCurrentHIDDevice && pCurrentHIDElement && (pCurrentHIDElement->type != kIOHIDElementTypeCollection))
! 	{
! 		SInt32 value = HIDGetElementValue (pCurrentHIDDevice, pCurrentHIDElement);
! 		SInt32 valueCal = HIDCalibrateValue (value, pCurrentHIDElement);
! 		SInt32 valueScale = HIDScaleValue (valueCal, pCurrentHIDElement);
! 	 }
  #endif  /* #ifdef __APPLE__ */
  
--- 229,243 ----
  		outlet_anything(x->x_obj.te_outlet,atom_gensym(event_data),3,event_data+1); 
  	}
! #elif __APPLE__
! /* 	pRecDevice pCurrentHIDDevice = GetSetCurrentDevice (gWindow); */
! /* 	pRecElement pCurrentHIDElement = GetSetCurrenstElement (gWindow); */
  
! /* 	// if we have a good device and element which is not a collecion */
! /* 	if (pCurrentHIDDevice && pCurrentHIDElement && (pCurrentHIDElement->type != kIOHIDElementTypeCollection)) */
! /* 	{ */
! /* 		SInt32 value = HIDGetElementValue (pCurrentHIDDevice, pCurrentHIDElement); */
! /* 		SInt32 valueCal = HIDCalibrateValue (value, pCurrentHIDElement); */
! /* 		SInt32 valueScale = HIDScaleValue (valueCal, pCurrentHIDElement); */
! /* 	 } */
  #endif  /* #ifdef __APPLE__ */
  
***************
*** 237,241 ****
  	}
  
! 	return 1;    
  }
  
--- 247,251 ----
  	}
  
! 	return 1;  /* why is this 1? */
  }
  

Index: Makefile
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/Makefile,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Makefile	20 Oct 2004 02:55:12 -0000	1.3
--- Makefile	22 Oct 2004 18:49:16 -0000	1.4
***************
*** 1,51 ****
! CC=gcc
! 
! OS_NAME = $(shell uname -s)
! 
! 
! # ----------------------- GNU/LINUX i386 -----------------------
! ifeq ($(OS_NAME),Linux)
! LDFLAGS = -export_dynamic  -shared
! .SUFFIXES: .pd_linux
! 
! all: input_arrays pd_linux
! pd_linux: hid.pd_linux
! 
! endif
! 
! # ----------------------- DARWIN -----------------------
! ifeq ($(OS_NAME),Darwin)
! LDFLAGS = -bundle  -bundle_loader $(PDEXECUTABLE) -L/sw/lib
! .SUFFIXES: .pd_darwin
! 
! all: input_arrays pd_darwin
! pd_darwin: hid.pd_darwin
! 
! endif
! 
! # ----------------------- GENERAL -----------------------
! 
! PDEXECUTABLE = ../../../pd/bin/pd
! 
! CFLAGS = -DUNIX -DPD -O2 -funroll-loops -fomit-frame-pointer \
!     -Wall -W -Wshadow -Wstrict-prototypes -Werror \
!     -Wno-unused -Wno-parentheses -Wno-switch
! 
! INCLUDE =  -I../ -I../../../pd/src -I/usr/local/include -I./HID\ Utilities\ Source
! 
! .c.pd_darwin:
! 	$(CC) $(CFLAGS) $(INCLUDE) -o $*.o -c $*.c
! 	$(CC) $(LDFLAGS) -o "$*.pd_darwin" "$*.o" -lc -lm 
! 
! .c.pd_linux:
! 	$(CC) $(CFLAGS) $(INCLUDE) -o $*.o -c $*.c
! 	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.h ev*-list.pd
! 
--- 1,55 ----
! 
! OS_NAME = $(shell uname -s)
! 
! 
! # ----------------------- GNU/LINUX i386 -----------------------
! ifeq ($(OS_NAME),Linux)
! LDFLAGS = -export_dynamic  -shared
! .SUFFIXES: .pd_linux
! 
! all: input_arrays pd_linux
! pd_linux: hid.pd_linux
! 
! endif
! 
! # ----------------------- DARWIN -----------------------
! ifeq ($(OS_NAME),Darwin)
! FRAMEWORKS = Carbon IOKit
! LDFLAGS = -bundle  -bundle_loader $(PDEXECUTABLE) \
! 	       -L/sw/lib -L./HID\ Utilities\ Source/build \
! 	       -lHIDUtilities \
! 			 $(patsubst %,-framework %,$(FRAMEWORKS))
! .SUFFIXES: .pd_darwin
! 
! all: input_arrays pd_darwin
! pd_darwin: hid.pd_darwin
! 
! endif
! 
! # ----------------------- GENERAL -----------------------
! 
! PDEXECUTABLE = ../../../pd/bin/pd
! 
! CFLAGS = -DUNIX -DPD -O2 -funroll-loops -fomit-frame-pointer \
!     -Wall -W -Wshadow -Wstrict-prototypes \
!     -Wno-unused -Wno-parentheses -Wno-switch
! 
! INCLUDE =  -I./ -I../../../pd/src -I./HID\ Utilities\ Source
! 
! .c.o:
! 	$(CC) $(CFLAGS) $(INCLUDE) -c *.c
! 
! .o.pd_darwin:
! 	$(CC) $(LDFLAGS) -o $*.pd_darwin *.o
! 
! .o.pd_linux:
! 	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.? ev*-list.pd
! 

Index: hid.h
===================================================================
RCS file: /cvsroot/pure-data/externals/hcs/hid/hid.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** hid.h	22 Oct 2004 05:43:17 -0000	1.1
--- hid.h	22 Oct 2004 18:49:16 -0000	1.2
***************
*** 1,6 ****
  
  #include <m_pd.h>
  
! #include "input_arrays.h"
  
  static char *version = "$Revision$";
--- 1,8 ----
+ #ifndef _HID_H
+ #define _HID_H
  
  #include <m_pd.h>
  
! #include "hid.h"
  
  static char *version = "$Revision$";
***************
*** 25,26 ****
--- 27,55 ----
  } t_hid;
  
+ 
+ /*------------------------------------------------------------------------------
+  *  FUNCTION PROTOTYPES FOR APPLE HID MANAGER
+  */
+ #ifdef __APPLE__
+ void releaseHIDDevices (void);
+ int prHIDBuildElementList(void);
+ int prHIDBuildDeviceList(void);
+ int prHIDGetValue(void);
+ void PushQueueEvents_RawValue(void);
+ void PushQueueEvents_CalibratedValue(void);
+ //static pascal void IdleTimer(EventLoopTimerRef inTimer, void* userData);
+ int prHIDReleaseDeviceList(void);
+ //static EventLoopTimerUPP GetTimerUPP(void);
+ //void callback(void * target, IOReturn result, void * refcon, void * sender);
+ int prHIDRunEventLoop(void);
+ int prHIDQueueDevice(void);
+ int prHIDQueueElement(void);
+ int prHIDDequeueElement(void);
+ int prHIDDequeueDevice(void);
+ int prHIDStopEventLoop(void);
+ #endif  /* #ifdef __APPLE__ */
+ 
+ 
+ 
+ 
+ #endif  /* #ifndef _HID_H */





More information about the Pd-cvs mailing list