Jump to content

VoodooPS2 optimized for Snow Leopard, Leopard and Tiger


Andy Vandijck
 Share

151 posts in this topic

Recommended Posts

Hey Andy!

It seems your driver as well as my version is not interesting for people.

 

I do not think this is the case, I wouldn't even be using the OS X if it weren't for the trackpad scrolling functionality. Lack of posts is likely due to the holidays; some are still hung over from the New Year's celebrations.

Link to comment
Share on other sites

Test report:

 

  • OS: 10.6.5 Retail (64 bit)
  • PC: Acer Aspire 5730ZG

Result:

  • Keyboard (Standard, ACPI\PNP0303): All of them works correctly (tide and good keymap, YEAH!!!), but the first build works incorrectly with my Media controller buttons. (Maybe wrong scancodes? Only the "FF" works correctly with the first build.)
  • Touchpad (Standard, ACPI\SYN0302): Didn't works with the second build, i using the .kext from the first build. Scrolling works correctly, but the cursor movement can be smoother, i think. Maybe wrong resolution for this Synaptics T.Pad in the driver? (FIXME!).

Thanks for Your work, i will test the other builds too.

Link to comment
Share on other sites

@Slice: I figured out how the prefpane sets values inside the driver.

It uses IORegistry set keys.

I adapted the preference pane for supporting the 3 different driver classes.

Still to do for the 2 classes is the following routine

IOReturn ApplePS2SynapticsTouchPad::setParamProperties( OSDictionary * config )
{
OSNumber *num;
OSBoolean *bl;
uint8_t oldmode=_touchPadModeByte;
struct {const char *name; int *var;} int32vars[]={
	{"FingerZ",							&z_finger		},
	{"Divisor",							&divisor		},
	{"RightEdge",						&redge			},
	{"LeftEdge",						&ledge			},
	{"TopEdge",							&tedge			},
	{"BottomEdge",						&bedge			},
	{"VerticalScrollDivisor",			&vscrolldivisor	},
	{"HorizontalScrollDivisor",			&hscrolldivisor	},
	{"CircularScrollDivisor",			&cscrolldivisor	},
	{"CenterX",							&centerx		},
	{"CenterY",							&centery		},
	{"CircularScrollTrigger",			&ctrigger		},
	{"MultiFingerWLimit",				&wlimit			},
	{"MultiFingerVerticalDivisor",		&wvdivisor		},
	{"MultiFingerHorizontalDivisor",	&whdivisor		},
	{"Resolution",					  (int *)&_resolution   }
};
struct {const char *name; int *var;} boolvars[]={
	{"StickyHorizontalScrolling",		&hsticky},
	{"StickyVerticalScrolling",			&vsticky},
	{"StickyMultiFingerScrolling",		&wsticky},
	{"StabilizeTapping",				&tapstable}
};
int i;
if (!config)
	return 0;
if (bl=OSDynamicCast (OSBoolean, config->getObject ("UseHighRate")))
	if (bl->isTrue())
		_touchPadModeByte |= 1<<6;
	else
		_touchPadModeByte &=~(1<<6);

if (num=OSDynamicCast (OSNumber, config->getObject ("TrackpadRightClick")))
	rtap = (num->unsigned32BitValue()&0x1)?true:false;
if (num=OSDynamicCast (OSNumber, config->getObject ("Clicking")))
	clicking = (num->unsigned32BitValue()&0x1)?true:false;
if (num=OSDynamicCast (OSNumber, config->getObject ("Dragging")))	
	dragging = (num->unsigned32BitValue()&0x1)?true:false;
if (num=OSDynamicCast (OSNumber, config->getObject ("DragLock")))
	draglock = (num->unsigned32BitValue()&0x1)?true:false;
if (num=OSDynamicCast (OSNumber, config->getObject ("TrackpadHorizScroll")))
	hscroll = (num->unsigned32BitValue()&0x1)?true:false;
if (num=OSDynamicCast (OSNumber, config->getObject ("TrackpadScroll")))
	scroll = (num->unsigned32BitValue()&0x1)?true:false;

if (num=OSDynamicCast (OSNumber, config->getObject ("MaxTapTime")))
	maxtaptime = num->unsigned64BitValue();
if (num=OSDynamicCast (OSNumber, config->getObject ("HIDClickTime")))
	maxdragtime = num->unsigned64BitValue();
for (i=0;(unsigned)i<sizeof (boolvars)/sizeof(boolvars[0]);i++)		
	if (bl=OSDynamicCast (OSBoolean,config->getObject (boolvars[i].name)))
		*(boolvars[i].var) = bl->isTrue();	
for (i=0;(unsigned)i<sizeof (int32vars)/sizeof(int32vars[0]);i++)		
	if (num=OSDynamicCast (OSNumber,config->getObject (int32vars[i].name)))
		*(int32vars[i].var) = num->unsigned32BitValue();

if (whdivisor || wvdivisor)
	_touchPadModeByte |= 1<<0;
else
	_touchPadModeByte &=~(1<<0);

if (_touchPadModeByte!=oldmode && inited)
	setTouchPadModeByte (_touchPadModeByte);
_packetByteCount=0;
touchmode = MODE_NOTOUCH;

for (i=0;(unsigned)i<sizeof (int32vars)/sizeof(int32vars[0]);i++)		
	setProperty (int32vars[i].name,*(int32vars[i].var),32);
for (i=0;(unsigned)i<sizeof (boolvars)/sizeof(int32vars[0]);i++)		
	setProperty (boolvars[i].name,*(boolvars[i].var)?kOSBooleanTrue:kOSBooleanFalse);

setProperty ("MaxTapTime", maxtaptime, 64);
setProperty ("HIDClickTime", maxdragtime, 64);
setProperty ("UseHighRate",_touchPadModeByte&(1<<6)?kOSBooleanTrue:kOSBooleanFalse);

setProperty ("Clicking", clicking?1:0, 32);
setProperty ("Dragging", dragging?1:0, 32);
setProperty ("DragLock", draglock?1:0, 32);
setProperty ("TrackpadHorizScroll", hscroll?1:0, 32);
setProperty ("TrackpadScroll", scroll?1:0, 32);
setProperty ("TrackpadRightClick", rtap?1:0, 32);

return super::setParamProperties(config);
}

This in combination with

IOReturn ApplePS2SynapticsTouchPad::setProperties (OSObject *props)

and in init:

	setProperty ("Revision", 24, 32);
tmp=properties->getObject ("Configuration");
if (tmp && OSDynamicCast (OSDictionary, tmp))
	setParamProperties (OSDynamicCast (OSDictionary, tmp));

sets the parameters and initial parameters.

I also implemented a resolution slider but it may still need some work within the driver classes to make it work properly.

it needs to override _resolution in order to work properly but I don't know if type IOFixed (type for _resolution) can be rewritten after allocation.

Configuration is a dictionary within the Info.plist which needs still to be implemented for the other driver classes too.

You can see from int32vars and boolvars which integers get overridden by the routine.

I think with those implemented (and default Configuration dict added to the 2 other IOKitPersonalities within the Info.plist) it will work just fine as it should.

This may need some minor rewrites as e.g. divisor isn't present yet within the ALPS or Sentellic driver classes.

Could you take a look?

I attached my latest work here too.

VoodooPS2.zip

Link to comment
Share on other sites

Hi.

 

I tried to load synapticsconfigload with no success.

 

I've got

 

localhost:~ VMonHeros$ /Library/VoodooPS2/synapticsconfigload ; exit;

synapticsconfigload(265) malloc: reference count underflow for 0x20000f300, break on auto_refcount_underflow_error to debug.

synapticsconfigload(265) malloc: reference count underflow for 0x20000f4c0, break on auto_refcount_underflow_error to debug.

logout

 

So... No configuration save.

 

Any idea ?

 

Hi Anv, can you help me on that ? I cannot use the last compiled file as I cannot save the config... So everytime I've got a slllooooowwwww mouse :P. At present time I use a previous version. Even if I cannot save the configuration, It is ok with this version for speed.

Link to comment
Share on other sites

Hey Andy so far everything is progressing nicely I see. I didn't know you had a thread opened here on this. I have found that if you add product ID 547 and VendorId 1452 in IOKitPersonalities the way it's in synaptics to the other 2 (alps / sentelic) you can open apple trackpad without it being modified or using a modified apple trackpad prefpane. you just have to shut off your bluetooth, if not it just looks for BT trackpad... Also if you change OSBundleRequired from Safeboot to Console the trackpad responds in -X boot and in 64bit kernel.. hope it helps

Link to comment
Share on other sites

I made a version that is good enough for me:

Keyboard supports multimedia keys.

ALPS trackpad supports tapping, sideScrolling and is affected by DarwinX Trackpad.prefPane.

 

THe KiNG

For you Keyboard will print all scancodes, not only extended, after you press PrintScreen. Second press stops logging.

At my keyboard PrintScreen = 0x2a (down)_0xaa (up) but not 0x37 as in the driver :) May be you change the key (logScan) to some other unuseful code.

And also for you debug version of ALPSTrackpad. It prints into kernel.log every touch to trackpad.

I see my getStatus differ from your

Jan  2 22:38:48 MacBook kernel[0]: [ApplePS2ALPSGlidePoint] getStatus(): [15 01 0a]
Jan  2 22:38:48 MacBook kernel[0]: [ApplePS2ALPSGlidePoint] getStatus(): [11 01 0a]

 

Debug version

VoodooPS2Controller.kext_DEBUG_Snow.zip

 

Full project with sources and binaries for Snow. Sorry Andy, I forget to apply your changes for Tiger.

VoodooPS2_Slice.zip

 

TODO

SideScrolling assumes panel size of 950x720. Thus x>900 = VScroll, y>600 = HScroll. It will be better to use VoodooPS2.prefPane settings that the driver understand, for example TopEgde, RightEdge.

Tapping uses information about pressure but settings FingerZ is not used. Dunno what is it.

I cancel twoFingerScrolling, it is not needed when I have sideScrolling.

Sticking is not implemented.

 

Haven't looked at the modded driver (did on original ApplePS2). May i suggest that FingerZ indicates the pressure of the pulsation? I mean, those devices are actually using strain gauges (i used google translate, don't even know if they're called that way) so that they can provide XYZ values based on resistivity measurments from the edges.

 

I may try the debug version, it's hard to believe but OSX special key codes are recognized different from Linux && Windows one's.

 

Really good job with the driver, don't even mind on those saying it's still buggy because you've done a great work. Thanks!

Link to comment
Share on other sites

@DarwinX, I search forum and get some information about the Pane, look the picture, delete some items of the info.plist file can make a different.

post-459659-1293899118_thumb.png

 

well.. came out of hibernation...!! For those who weren't around when this fix was implemented by Chrysaor after the 10.5.6 update on macgirl's thread(??), all you need to do is delete the first two lines of the marked area. Any Trackpad.prefpane that you find in this jungle and working for your alps will be this and not much else. To my knowledge no one has done any patching on it other than Apple Inc.

Link to comment
Share on other sites

well.. came out of hibernation...!! For those who weren't around when this fix was implemented by Chrysaor after the 10.5.6 update on macgirl's thread(??), all you need to do is delete the first two lines of the marked area. Any Trackpad.prefpane that you find in this jungle and working for your alps will be this and not much else. To my knowledge no one has done any patching on it other than Apple Inc.

Yes! :)

Do the follow in the vanilla Trackpad.prefPane.info.plist

	<key>NSMainNibFile</key>
<string>OldTrackpadTab</string>
<!--	<key>NSPrefPaneSearchParameters</key>
<string>Trackpad</string>
<key>NSPrefPanelIconLabel</key>
<string>Trackpad</string> -->
<key>NSPrincipalClass</key>
<string>Trackpad</string>

And its works with ALPS, and has effect, and save settings.

Link to comment
Share on other sites

Yes! :P

Do the follow in the vanilla Trackpad.prefPane.info.plist

	<key>NSMainNibFile</key>
<string>OldTrackpadTab</string>
<!--	<key>NSPrefPaneSearchParameters</key>
<string>Trackpad</string>
<key>NSPrefPanelIconLabel</key>
<string>Trackpad</string> -->
<key>NSPrincipalClass</key>
<string>Trackpad</string>

And its works with ALPS, and has effect, and save settings.

 

You actually don't need to comment out NSPrefPaneSearchParameters and NSPrefPanelIconLabel. I don't think keeping them makes a difference but removing them is not necessary. Only the NSPrefPanelOserviceAttributesToM and NSPrefPanelOServiceToMatch keys need to be removed...

 

also, you have to "convince" the system pref that you are loading the wrong Trackpad pref pane before it recognizes the right one. So do the following if necessary:

 

Load complete vanilla Trackpad prefpane without any mod and see if sys pref says "Trackpad not available"

 

Then close sys pref, make mods and then open it again... should work....

Link to comment
Share on other sites

You actually don't need to comment out NSPrefPaneSearchParameters and NSPrefPanelIconLabel. I don't think keeping them makes a difference but removing them is not necessary. Only the NSPrefPanelOserviceAttributesToM and NSPrefPanelOServiceToMatch keys need to be removed...

 

also, you have to "convince" the system pref that you are loading the wrong Trackpad pref pane before it recognizes the right one. So do the following if necessary:

 

Load complete vanilla Trackpad prefpane without any mod and see if sys pref says "Trackpad not available"

 

Then close sys pref, make mods and then open it again... should work....

 

I have long ago trashed the original native Trackpad.prefPane so would anyone please share theirs? Also, is there a two finger scrolling implementation which controls the Alp's trackpad in the native Trackpad.prefPane?

Link to comment
Share on other sites

You actually don't need to comment out NSPrefPaneSearchParameters and NSPrefPanelIconLabel. I don't think keeping them makes a difference but removing them is not necessary. Only the NSPrefPanelOserviceAttributesToM and NSPrefPanelOServiceToMatch keys need to be removed...

 

also, you have to "convince" the system pref that you are loading the wrong Trackpad pref pane before it recognizes the right one. So do the following if necessary:

 

Load complete vanilla Trackpad prefpane without any mod and see if sys pref says "Trackpad not available"

 

Then close sys pref, make mods and then open it again... should work....

There is vanilla info.plist (system 10.6.6 10J567)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>Trackpad</string>
<key>CFBundleGetInfoString</key>
<string>Trackpad Preference Pane</string>
<key>CFBundleIconFile</key>
<string>Trackpad.icns</string>
<key>CFBundleIdentifier</key>
<string>com.apple.preference.trackpad</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Trackpad</string>
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>2.8</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>2.8</string>
<key>NSMainNibFile</key>
<string>OldTrackpadTab</string>
<key>NSPrefPaneSearchParameters</key>
<string>Trackpad</string>
<key>NSPrefPanelIconLabel</key>
<string>Trackpad</string>
<key>NSPrincipalClass</key>
<string>Trackpad</string>
</dict>
</plist>

But you are right. Once the prefPane recognize trackpad and save his settings it will works even without any mods.

Link to comment
Share on other sites

I have long ago trashed the original native Trackpad.prefPane so would anyone please share theirs? Also, is there a two finger scrolling implementation which controls the Alp's trackpad in the native Trackpad.prefPane?

 

Here you go: Vanilla trackpad with Info.plist mod

 

Two finger scroll setting are in the trackpad prefpane.

 

ps. I still use VoodooPS2 + AppleACPIPS2Nub.

 

pps. backup instead of delete is a good idea.

Link to comment
Share on other sites

Here you go: Vanilla trackpad with Info.plist mod

 

Two finger scroll setting are in the trackpad prefpane.

 

ps. I still use VoodooPS2 + AppleACPIPS2Nub.

 

pps. backup instead of delete is a good idea.

 

It's the same one I've posted on this thread earlier, I've been using it for quite a while. By the way, if you take the two Apple videos out of its Resources folder, the size is significantly reduced to only 1.6 MB. Also, the new VoodooPS2.kext is quite an improvement over the one we've been using in that not only does it allow for the use of one less kext but also finally provides the tapping functionality which is also controllable by the aforementioned preference pane. The current native Trackpad.prefPane does absolutely nothing in my system short of searching for the Bluetooth hardware, even with the plist modifications. Disabling the Bluetooth is simply not an option for me.

Link to comment
Share on other sites

It's the same one I've posted on this thread earlier, I've been using it for quite a while. By the way, if you take the two Apple videos out of its Resources folder, the size is significantly reduced to only 1.6 MB. Also, the new VoodooPS2.kext is quite an improvement over the one we've been using in that not only does it allow for the use of one less kext but also finally provides the tapping functionality which is also controllable by the aforementioned preference pane. The current native Trackpad.prefPane does absolutely nothing in my system short of searching for the Bluetooth hardware, even with the plist modifications. Disabling the Bluetooth is simply not an option for me.

 

I have had tapping with my voodoops2 + appleacpips2nub for ages now, ever since I installed SL a month after it was released and it has always been controllable by the prefpane. I don't want to remove the videos coz I like keeping stuff as untouched as possible. I've known of their existence ever since Apple put them in there.

 

I don't get the thing about bluetooth you mentioned, I have bluetooth and don't have any problems...

 

Also, native trackpad.prefpane = vanilla trackpadprefpane = any that you will find anywhere that works with Alps = one which has both two finger scrolling and tapping controls in it = the one I posted = the one you posted. (except for differing Info.plist)

Link to comment
Share on other sites

I don't get the thing about bluetooth you mentioned, I have bluetooth and don't have any problems...

 

Also, native trackpad.prefpane = vanilla trackpadprefpane = any that you will find anywhere that works with Alps = one which has both two finger scrolling and tapping controls in it = the one I posted = the one you posted. (except for differing Info.plist)

 

I was referring to the current native trackpad.prefane v2.6 with the new buttonless functionality. I am not certain which version of the OS X our current working trackpad.prefpane (2.0) is from. Do you know?

Link to comment
Share on other sites

I was referring to the current native trackpad.prefane v2.6 with the new buttonless functionality. I am not certain which version of the OS X our current working trackpad.prefpane (2.0) is from. Do you know?

Current native trackpad pref pane v2.8. OSX 10.6.6 10J567.

For any settings in prefPane may influence the driver must understand it.

Link to comment
Share on other sites

Bingo Slice:

 

Trackpad.prefpane V2.8

 

Pacifist is a very useful application. Have you got this version to work Slice or DarwinX?

Why I need to download this version from megaupload? The same one, same size, vanilla from 10.6.6, works for me with my driver. Dragging is not working because I didn't implement it. Twofinger scroll switch on/off sideScrolling - it is a property of my driver. "Scrolling speed" influences on scrolling speed.

Screen_shot_2011_01_11_at_10.28.48.png

IOReturn ApplePS2ALPSGlidePoint::setParamProperties( OSDictionary * dict )
{
OSNumber * clicking = OSDynamicCast( OSNumber, dict->getObject("Clicking") );
OSNumber * dragging = OSDynamicCast( OSNumber, dict->getObject("Dragging") );
OSNumber * draglock = OSDynamicCast( OSNumber, dict->getObject("DragLock") );
OSNumber * hscroll  = OSDynamicCast( OSNumber, dict->getObject("TrackpadHorizScroll") );
OSNumber * vscroll  = OSDynamicCast( OSNumber, dict->getObject("TrackpadScroll") );
OSNumber * eaccell  = OSDynamicCast( OSNumber, dict->getObject("HIDTrackpadScrollAcceleration") );
OSNumber * accell   = OSDynamicCast( OSNumber, dict->getObject("HIDTrackpadAcceleration") );

		if (xdiff && (scroll & SCROLL_HORIZ) && _edgehscroll) { //is Horizontal Scrolling on in Trackpad.prefpane?
		s_xdiff = (xdiff > 0)?(-1):1;
	}
	if (ydiff && (scroll & SCROLL_VERT) && _edgevscroll){ //is Vertical Scrolling on in Trackpad.prefpane?
		s_ydiff = (ydiff > 0)?(-1):1;
	}

	tfsf2 = (int)(tfsfactor + (int)((int)_edgeaccell/(256*16)));  //Value from Trackpad.prefpanes
	dispatchScrollWheelEvent(s_ydiff*tfsf2, s_xdiff*tfsf2, 0, now);  //Multiply with a factor	
	touchmode = MODE_VSCROLL;

Link to comment
Share on other sites

Why I need to download this version from megaupload? The same one, same size, vanilla from 10.6.6, works for me with my driver. Dragging is not working because I didn't implement it. Twofinger scroll switch on/off sideScrolling - it is a property of my driver. "Scrolling speed" influences on scrolling speed.

 

Slice, the screenshot you provided shows an interface of the Trackpad.prefPane v.2.0, the same as Talisman and I have been using for a while.

 

 

 

Would you care to elaborate on your statement please?

 

Bingo Slice:

 

Trackpad.prefpane V2.8

 

Pacifist is a very useful application. Have you got this version to work Slice or DarwinX?

 

Thank you, Talisman. On my system, the Trackpad.prefPane v.2.8 just continually and unsuccessfully searches for the Bluetooth trackpad.

 

 

Link to comment
Share on other sites

Slice, the screenshot you provided shows an interface of the Trackpad.prefPane v.2.0, the same as Talisman and I have been using for a while.

 

Would you care to elaborate on your statement please?

I am sure what I said

Screen_shot_2011_01_11_at_14.45.41.png

Screen_shot_2011_01_11_at_14.53.48.png

 

Thank you, Talisman. On my system, the Trackpad.prefPane v.2.8 just continually and unsuccessfully searches for the Bluetooth trackpad.

Search?!

	<key>NSPrefPaneSearchParameters</key>
<string>Trackpad</string>

I proposed to exclude these lines.

Link to comment
Share on other sites

Slice, the upload is for DarwinX, he mentioned he lost the vanilla one.

 

Pacifist is an application which lets you extract stuff selectively from a pkg or mpkg. It is quite useful for pulling out stuff from a large package.

 

Slice is using 2.8, they all look the same. I'll mess with all this once I have more time than just to write 5 lines out here...!!

Link to comment
Share on other sites

Search?!

	<key>NSPrefPaneSearchParameters</key>
 <string>Trackpad</string>

I proposed to exclude these lines.

 

With those parameters excluded, the result is identical to the one I described above. ;)

 

Slice is using 2.8, they all look the same. I'll mess with all this once I have more time than just to write 5 lines out here...!!

 

So I see, I hadn't realized that. I appreciate the clarification.

Link to comment
Share on other sites

 Share

×
×
  • Create New...