geekhack

geekhack Community => Input Devices => Topic started by: didjamatic on Mon, 22 March 2010, 16:26:32

Title: DT225 Scroll Programming
Post by: didjamatic on Mon, 22 March 2010, 16:26:32
I saw this link (http://www.ch-hangar.com/forum/showthread.php?6324-Programing-Dt225-scroll-lock&p=38377#post38377) that Ripster posted to a thread about programming a DT225 to allow you to scroll.  I've posted in that forum hoping someone would help me with my lack of experience in this arena.

I'd like to configure the top right button so that If I push it, the ball becomes a scrolling device, if I push it again, it is a pointing device... or something similar.  Also, the top left button as a back button?

Has anyone successfully done this?
Title: DT225 Scroll Programming
Post by: didjamatic on Thu, 25 March 2010, 09:10:21
Dang.  I was hoping to tweak it to be able to use it as a volume control as well, but I guess that's out.
Title: DT225 Scroll Programming
Post by: chuckading on Thu, 25 March 2010, 15:49:38
Quote from: didjamatic;166178

I'd like to configure the top right button so that If I push it, the ball becomes a scrolling device, if I push it again, it is a pointing device... or something similar.


I was able to configure it like that in OSX using USB Overdrive if anyone else is interested.

didjamatic, hope you find a Windows or Linux solution, I'd like to know myself.
Title: DT225 Scroll Programming
Post by: ricercar on Thu, 25 March 2010, 18:27:18
Quote from: webwit;166838
Who needs volume control?


Anyone on a diet.
Title: DT225 Scroll Programming
Post by: hyperlinked on Thu, 25 March 2010, 18:31:59
Quote from: chuckading;166844
I was able to configure it like that in OSX using USB Overdrive if anyone else is interested.

didjamatic, hope you find a Windows or Linux solution, I'd like to know myself.


Do you have the USB or PS/2 Version? I'd like to try that if I end up using this on my Mac. Right now it's dedicated to my Asus Netbook.
Title: DT225 Scroll Programming
Post by: didjamatic on Thu, 25 March 2010, 19:30:52
Mine is PS/2
Title: DT225 Scroll Programming
Post by: chuckading on Fri, 26 March 2010, 15:17:12
Quote from: hyperlinked;166897
Do you have the USB or PS/2 Version? I'd like to try that if I end up using this on my Mac. Right now it's dedicated to my Asus Netbook.


I have the PS/2 version.  I used a ps2 to usb converter.  USB Overdrive treats it as a USB device and also allows for it and other USB devices to have different settings.
Title: DT225 Scroll Programming
Post by: EverythingIBM on Fri, 26 March 2010, 17:02:32
Quote from: ripster;167133
Dang.  USB Overdrive, Steermouse, AND Controllermate.  Apple guys have all the fun.

If anyone finds a Windows equivalent give a yell.  Being able to have different settings for different devices shouldn't be so hard.


What about the linux guys?
Title: DT225 Scroll Programming
Post by: platon on Fri, 26 March 2010, 18:08:51
Quote from: EverythingIBM;167147
What about the linux guys?


Linux guys custom develop their own!
Title: DT225 Scroll Programming
Post by: kishy on Fri, 26 March 2010, 20:51:46
Quote from: ripster;167133
Dang.  USB Overdrive, Steermouse, AND Controllermate.  Apple guys have all the fun.

If anyone finds a Windows equivalent give a yell.  Being able to have different settings for different devices shouldn't be so hard.


I think the reason why it's not easy to implement in Windows is because all pointing devices are "combined as one" at the driver level such that the software sensitivity control can't selectively choose what to adjust the sensitivity of.

These are my suspicions based on the behaviour of the hardware and the software...I don't know how it works, just speculating.
Title: DT225 Scroll Programming
Post by: EverythingIBM on Fri, 26 March 2010, 22:02:19
Quote from: kishy;167254
I think the reason why it's not easy to implement in Windows is because all pointing devices are "combined as one" at the driver level such that the software sensitivity control can't selectively choose what to adjust the sensitivity of.

These are my suspicions based on the behaviour of the hardware and the software...I don't know how it works, just speculating.


There was some weird pirate game I seen many moons ago utilizing multiple cursors on one screen (four to be exact). I doubt it would be possible to control that many with one keyboard... and a mouse.
Title: DT225 Scroll Programming
Post by: kishy on Fri, 26 March 2010, 22:22:38
Quote from: EverythingIBM;167270
There was some weird pirate game I seen many moons ago utilizing multiple cursors on one screen (four to be exact). I doubt it would be possible to control that many with one keyboard... and a mouse.


Well in that case it's adding severals "layers" to the "mouse model", if that makes sense. They're all controlled by the mouse, which can itself be multiple mice, but I guess the game let you toggle between which cursor you were moving?
Title: DT225 Scroll Programming
Post by: ricercar on Fri, 26 March 2010, 22:33:58
Quote from: EverythingIBM;167270
There was some weird pirate game I seen many moons ago utilizing multiple cursors on one screen (four to be exact). I doubt it would be possible to control that many with one keyboard... and a mouse.

Jetway made a motherboard recognizing two mouse and two keyboard ports (http://www.tomshardware.com/reviews/jetway,924.html). Assuming you have a two-port graphics card, you could use the normally-ignored multi-login capabilities of WindowsXP to allow two users per computer.
Title: DT225 Scroll Programming
Post by: JulienC on Sat, 27 March 2010, 22:10:11
Quote from: ripster;166885
Check this page (http://dirk.net/2009/01/03/scroll-wheel-function-for-the-marble-mouse-on-linux/) for a Linux  solution and a live link to Marble Mouse Scroll Wheel for Windows users.

I wish the forum had a Pointing Devices reviews section.  I'd pop up the info to a central location.

Thanks for the Linux solution, when I get a DT225 I will surely try that. For the info in a central location, maybe a wiki page would do it ?
Title: DT225 Scroll Programming
Post by: bootstrap on Wed, 12 October 2011, 16:58:14
In case anyone's interested to know about the scroll function programmed the DT225 (USB), these are the default (NIB) settings on a laptop running XP:

Button No. 1 (Bottom Left): Left click
Button No. 2 (Top Left): Auto Scroll
Button No. 3 (Bottom Right): Right click
Button No. 8 (Top Right): Back button

I found the auto scroll function extremely handy. Unfortunately, I am a Linux user, so I don't use it much.

Configuring the buttons in Linux has been a nightmare so far. The link to "Scroll Wheel Function for the Marble Mouse on Linux" above is probably not going to help many people - things, e.g. HAL, have changed since that post.

Anyway, here are the default functions of the buttons in CrunchBang Linux (which is based on Debian):

Button No. 1 (Bottom Left): Left click
Button No. 2 (Top Left): Forward button
Button No. 3 (Bottom Right): Right click
Button No. 8 (Top Right): Back button

The functions are easily interchangeable in Linux. Page Up and Page Down can also be programmed into any of the 4 buttons. However, scroll function remains elusive.

I have searched for a way to make one of the buttons scroll (or auto scroll) but haven't got the answer yet. Tried a few settings in xorg.conf and autostart.sh to no avail.

Ideas, anyone?
Title: CH Products DT225 Trackball: Scrolling on Linux
Post by: bootstrap on Thu, 13 October 2011, 12:37:54
I found one solution that creates the following functions for the 4 buttons of a CH Products DT225 trackball (USB) on Linux:

Bottom-left (large) button: Normal click
Bottom-right (large) button: Right-click
Top-left (small) button: 'Back' on click
Top-right (small) button: 'Forward' on click; Vertical (up-down) scrolling on holding down

To achieve this on CrunchBang Linux (Statler) (a Linux distro based on Debian), I added the following lines of code in /usr/share/X11/xorg.conf.d/10-edev.conf:

Code: [Select]

#       - - - CH Products DT225 Trackball Settings - - -
#       - - - - - by bootstrap (geekhack.org) - - - - - -
#
#       To help readers understand the configuration better, a CH Products DT225 trackball has buttons
#       labeled as follows: A (left-large), B (left-small), C (right-large), D (right-small).

#       Usage: A=normal-click  B=Back C=right-click D=Forward
     
#       Press button D (hold button while rolling trackball) to emulate wheel-scrolling.

#       The trackball can scroll in two-axes, unlike a typical wheel mouse. Adjust the
#       settings to constrain the scroll action to vertical-axis-only if you prefer. (*untested*)

Section "InputClass"
        Identifier  "Mouse0"
        MatchProduct "CH PRODUCTS CH USB TRACKBALL"
        MatchIsPointer "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
#       Physical button labels:     A B C - - - - D      - = no button
        Option "ButtonMapping"     "1 8 3 4 5 6 7 2"

#       EmulateWheel refers to emulating a mouse wheel using trackball.
        Option "EmulateWheel" "true"          
        Option "EmulateWheelButton" "8"
        Option "ZAxisMapping" "4 5"
#       Option "XAxisMapping" "6 7"                  # Disable this for vertical-only scrolling.
#       Emulate3Buttons refers to the act of pressing buttons A and C
#       simultaneously to emulate a middle-click or wheel click - **work in progress**.
#       Option "Emulate3Buttons" "true"
#       Option "Emulate3Timeout" "50"
EndSection


I'm fine tuning some things while working out horizontal scrolling and a more suitable configuration for left-handers. I'll post my results in my blog within the next few days.
Title: DT225 Scroll Programming
Post by: czarek on Wed, 19 October 2011, 11:24:53
If anyone uses ControllerMate on a Mac here's the config for scroll:
Code: [Select]

<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>
<!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;>
<plist version=&quot;1.0&quot;>
<dict>
<key>Collection</key>
<array>
<dict>
<key>ScratchpadContent</key>
<array>
<dict>
<key>Connections</key>
<dict>
<key>331915990495387008</key>
<string>331916001350015232</string>
<key>331915990495387009</key>
<string>331916001886637824</string>
<key>331915990495733120</key>
<string>331915990500610816</string>
<key>331915990496062336</key>
<string>331915990500287232</string>
<key>331915990496401280</key>
<string>331915990495386880</string>
<key>331915990496711552</key>
<string>331916001350015232</string>
<key>331915990496711553</key>
<string>331915990496401152</string>
<key>331915990497036160</key>
<string>331915990497343232</string>
<key>331915990497036161</key>
<string>331916001886637824</string>
<key>331915990497343360</key>
<string>331915990495386880</string>
<key>331915990498002560</key>
<string>331916071120036864</string>
<key>331915990500287360</key>
<string>331915990497036032</string>
<key>331915990500610944</key>
<string>331915990496711424</string>
<key>331915990500938624</key>
<string>331916070218395648</string>
<key>331915990501266304</key>
<string>331915990500938496</string>
<key>331915990501578112</key>
<string>331915990501266176</string>
<key>331916070218395776</key>
<string>331915990498002432</string>
<key>331916071120036992</key>
<string>331916109580674816</string>
<key>331916109580674944</key>
<string>331915990495386880</string>
<key>332484837349100928</key>
<string>331915990501577984</string>
<key>332484838078240384</key>
<string>332484837349100800</string>
<key>332484838782628480</key>
<string>332484838078240256</string>
</dict>
<key>Elements</key>
<array>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990495386880</string>
<key>Input Count</key>
<integer>2</integer>
<key>Location</key>
<string>{240, 160}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>AND</string>
</dict>
<dict>
<key>Action</key>
<integer>0</integer>
<key>Button</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990495732992</string>
<key>Location</key>
<string>{40, 308}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>OffAction</key>
<integer>1</integer>
<key>TriggerElements</key>
<array/>
<key>Type</key>
<string>Mouse Button</string>
</dict>
<dict>
<key>Action</key>
<integer>0</integer>
<key>Button</key>
<integer>1</integer>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990496062208</string>
<key>Location</key>
<string>{440, 308}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>OffAction</key>
<integer>1</integer>
<key>TriggerElements</key>
<array/>
<key>Type</key>
<string>Mouse Button</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990496401152</string>
<key>Input Count</key>
<integer>1</integer>
<key>Location</key>
<string>{140, 210}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>NOT</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990496711424</string>
<key>Input Count</key>
<integer>2</integer>
<key>Location</key>
<string>{40, 252}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>AND</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990497036032</string>
<key>Input Count</key>
<integer>2</integer>
<key>Location</key>
<string>{440, 252}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>AND</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990497343232</string>
<key>Input Count</key>
<integer>1</integer>
<key>Location</key>
<string>{340, 210}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>NOT</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>False Action</key>
<string>Disable</string>
<key>Identifier</key>
<string>331915990498002432</string>
<key>Location</key>
<string>{240, 378}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Target</key>
<string>331915990497668864</string>
<key>True Action</key>
<string>Enable</string>
<key>Type</key>
<string>Property</string>
</dict>
<dict>
<key>Cancel Action</key>
<integer>0</integer>
<key>Duration</key>
<real>0.050000000000000003</real>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990500287232</string>
<key>Location</key>
<string>{440, 280}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Delay</string>
</dict>
<dict>
<key>Cancel Action</key>
<integer>0</integer>
<key>Duration</key>
<real>0.050000000000000003</real>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990500610816</string>
<key>Location</key>
<string>{40, 280}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Delay</string>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>241</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>1561329664</integer>
<key>HIDDeviceManufacturer</key>
<string>Unicomp </string>
<key>HIDDeviceMaxCookie</key>
<integer>245</integer>
<key>HIDDeviceProduct</key>
<string>Endura Pro Keyboard </string>
<key>HIDDeviceProductID</key>
<integer>2309</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>6</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>6134</integer>
<key>HIDDeviceVersion</key>
<integer>17204</integer>
</dict>
<key>HIDElementCookie</key>
<integer>241</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Num Lock</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>129</integer>
<key>HIDElementUsage</key>
<integer>1</integer>
<key>HIDElementUsagePage</key>
<integer>8</integer>
</dict>
<key>Identifier</key>
<string>331915990500938496</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 434}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>LightEmittingDiode</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>242</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>1561329664</integer>
<key>HIDDeviceManufacturer</key>
<string>Unicomp </string>
<key>HIDDeviceMaxCookie</key>
<integer>245</integer>
<key>HIDDeviceProduct</key>
<string>Endura Pro Keyboard </string>
<key>HIDDeviceProductID</key>
<integer>2309</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>6</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>6134</integer>
<key>HIDDeviceVersion</key>
<integer>17204</integer>
</dict>
<key>HIDElementCookie</key>
<integer>242</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Caps Lock</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>129</integer>
<key>HIDElementUsage</key>
<integer>2</integer>
<key>HIDElementUsagePage</key>
<integer>8</integer>
</dict>
<key>Identifier</key>
<string>331915990501266176</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 462}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>LightEmittingDiode</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>243</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>1561329664</integer>
<key>HIDDeviceManufacturer</key>
<string>Unicomp </string>
<key>HIDDeviceMaxCookie</key>
<integer>245</integer>
<key>HIDDeviceProduct</key>
<string>Endura Pro Keyboard </string>
<key>HIDDeviceProductID</key>
<integer>2309</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>6</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>6134</integer>
<key>HIDDeviceVersion</key>
<integer>17204</integer>
</dict>
<key>HIDElementCookie</key>
<integer>243</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Scroll Lock</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>129</integer>
<key>HIDElementUsage</key>
<integer>3</integer>
<key>HIDElementUsagePage</key>
<integer>8</integer>
</dict>
<key>Identifier</key>
<string>331915990501577984</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 490}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>LightEmittingDiode</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>3</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>-98107392</integer>
<key>HIDDeviceManufacturer</key>
<string>CH PRODUCTS</string>
<key>HIDDeviceMaxCookie</key>
<integer>8</integer>
<key>HIDDeviceProduct</key>
<string>CH USB TRACKBALL</string>
<key>HIDDeviceProductID</key>
<integer>63232</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>2</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>36358</integer>
<key>HIDDeviceVersion</key>
<integer>0</integer>
</dict>
<key>HIDElementCookie</key>
<integer>3</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Button #1</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>2</integer>
<key>HIDElementUsage</key>
<integer>1</integer>
<key>HIDElementUsagePage</key>
<integer>9</integer>
</dict>
<key>Identifier</key>
<string>331916001350015232</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{70, 50}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Button</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<true/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>4</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>-98107392</integer>
<key>HIDDeviceManufacturer</key>
<string>CH PRODUCTS</string>
<key>HIDDeviceMaxCookie</key>
<integer>8</integer>
<key>HIDDeviceProduct</key>
<string>CH USB TRACKBALL</string>
<key>HIDDeviceProductID</key>
<integer>63232</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>2</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>36358</integer>
<key>HIDDeviceVersion</key>
<integer>0</integer>
</dict>
<key>HIDElementCookie</key>
<integer>4</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Button #2</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>2</integer>
<key>HIDElementUsage</key>
<integer>2</integer>
<key>HIDElementUsagePage</key>
<integer>9</integer>
</dict>
<key>Identifier</key>
<string>331916001886637824</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{410, 50}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Button</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<true/>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>False Action</key>
<string>Enable</string>
<key>Identifier</key>
<string>331916070218395648</string>
<key>Location</key>
<string>{240, 406}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Target</key>
<string>331916019551990016</string>
<key>True Action</key>
<string>Disable</string>
<key>Type</key>
<string>Property</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>False Action</key>
<string>Disable</string>
<key>Identifier</key>
<string>331916071120036864</string>
<key>Location</key>
<string>{240, 350}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Target</key>
<string>331916020615286272</string>
<key>True Action</key>
<string>Enable</string>
<key>Type</key>
<string>Property</string>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>HasResetInput</key>
<false/>
<key>Identifier</key>
<string>331916109580674816</string>
<key>InitialValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 300}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Toggle</string>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>249</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>487587840</integer>
<key>HIDDeviceManufacturer</key>
<string>Unnamed Manufacturer</string>
<key>HIDDeviceMaxCookie</key>
<integer>253</integer>
<key>HIDDeviceProduct</key>
<string>USBPS2</string>
<key>HIDDeviceProductID</key>
<integer>1</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>6</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>3389</integer>
<key>HIDDeviceVersion</key>
<integer>1</integer>
</dict>
<key>HIDElementCookie</key>
<integer>249</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Num Lock</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>129</integer>
<key>HIDElementUsage</key>
<integer>1</integer>
<key>HIDElementUsagePage</key>
<integer>8</integer>
</dict>
<key>Identifier</key>
<string>332484837349100800</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 518}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>LightEmittingDiode</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>250</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>487587840</integer>
<key>HIDDeviceManufacturer</key>
<string>Unnamed Manufacturer</string>
<key>HIDDeviceMaxCookie</key>
<integer>253</integer>
<key>HIDDeviceProduct</key>
<string>USBPS2</string>
<key>HIDDeviceProductID</key>
<integer>1</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>6</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>3389</integer>
<key>HIDDeviceVersion</key>
<integer>1</integer>
</dict>
<key>HIDElementCookie</key>
<integer>250</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Caps Lock</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>129</integer>
<key>HIDElementUsage</key>
<integer>2</integer>
<key>HIDElementUsagePage</key>
<integer>8</integer>
</dict>
<key>Identifier</key>
<string>332484838078240256</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 546}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>LightEmittingDiode</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>251</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<true/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>487587840</integer>
<key>HIDDeviceManufacturer</key>
<string>Unnamed Manufacturer</string>
<key>HIDDeviceMaxCookie</key>
<integer>253</integer>
<key>HIDDeviceProduct</key>
<string>USBPS2</string>
<key>HIDDeviceProductID</key>
<integer>1</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>6</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>3389</integer>
<key>HIDDeviceVersion</key>
<integer>1</integer>
</dict>
<key>HIDElementCookie</key>
<integer>251</integer>
<key>HIDElementMaxValue</key>
<integer>1</integer>
<key>HIDElementMinValue</key>
<integer>0</integer>
<key>HIDElementName</key>
<string>Scroll Lock</string>
<key>HIDElementRelativeValue</key>
<false/>
<key>HIDElementSize</key>
<integer>1</integer>
<key>HIDElementType</key>
<integer>129</integer>
<key>HIDElementUsage</key>
<integer>3</integer>
<key>HIDElementUsagePage</key>
<integer>8</integer>
</dict>
<key>Identifier</key>
<string>332484838782628352</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{240, 574}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>LightEmittingDiode</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
</array>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331915990493690112</string>
<key>ResetBeforeDisable</key>
<false/>
<key>ResetBeforeEnable</key>
<false/>
<key>Title</key>
<string>TB Scrolling Emulator Enabler</string>
<key>Type</key>
<string>Page</string>
</dict>
</array>
<key>ScratchpadDeviceTypes</key>
<array>
<string>6134:2309:1:6</string>
<string>36358:63232:1:2</string>
<string>3389:1:1:6</string>
</array>
<key>ScratchpadIdentifier</key>
<string>49B33D5B4A5F900</string>
<key>ScratchpadImageData</key>
<data>
TU0AKgAAA4xTakrhaIVc8GaDWvBlglnwZYJZ8GWCWvBmglrwZoJa
8GaDWvBmg1rwZ4Nb8GeDW/Bng1vwaYVd8FdvTuFnhFv0hap1/4Oo
dP+Ep3T/hKl1/4Kocf+ApnD/gaZw/4Kocv+EqnT/hal1/4Sodf+E
qHX/h6t3/22LYfRmg1vwhKh1/4Klc/+CpnP/fJ1u/4megf+RpIn/
k6aL/42hhP95lW3/eZ1q/4Kmc/+BpXL/hKh1/2uJX/Bng1vwhKh1
/4Glcv+ApnH/dZNo/93d3f/49/n/8e/y//Xy9v/n6Of/mqmT/3ea
aP+BpXL/hKh0/2yJX/BmglrwhKh0/4Glcv+CpnL/d5Vr/+vs6v/R
1M//gJZ3/46hhv/d4Nv//fz+/4yigv9/pHD/hal2/2uKYPBlglrw
g6h0/4Glcv+BpXL/dpRp/+rr6v/EysH/d5tn/3eeZv+SpIr/////
/6a1oP93nWj/hal1/2uJYPBkgVjwgaZy/4Ckcf+ApXH/dpRp/+rr
6//CyL//bZFe/22UXf+fr5j//////5+wmP94nmj/g6hz/2qIXfBm
g1rwg6h0/4Glcv+BpnL/dpRq/+fo5v/c39v/orCb/7O+rv/z8/P/
5ebl/36ac/+CpnL/hKh1/2yJX/BnhFzwhal2/4Klc/+BpnL/dZNp
/+Hj4f///v//+/n8//z6/f/M0cr/gJh3/32hbv+Ep3X/hql3/22K
YfBlglrwgqdz/3+jcP9/pG//dJNn/+nq6f/M0Mr/e5Rx/32Ycf92
l2j/faJt/4Glcv+ApHH/hKh0/2uJX/BmglvwhKh0/4Glcv+BpnL/
dpVp/+rr6v/FysL/dZpn/4Gmcf+CpnL/gqVz/4Klc/+CpXP/hKh1
/2uJX/Bmglrwg6dz/4Gkcv+BpnL/dpRp//Lx8v/Lz8n/eJpp/4Km
c/+CpXP/gaVy/4Gkcv+ApHL/g6d0/2qJXvBmg1vwhKh1/4Gkcv+B
pnL/d5dq/7S7sf+fqpr/e51s/4Kmc/+CpXP/gaVy/4Klc/+CpXP/
hal2/2yKYPBohVz0h6x4/4Wpdv+Gqnb/hal2/32fbv9+oW//hal1
/4Wpdf+EqHX/hal2/4Wpdv+FqXX/h6x4/26MYfRWbkvhbItg8GuJ
XvBriV/wa4lf8GyKX/BsimDwbIlf8GuJXvBriV/wa4lf8GuJX/Br
iV/wbYtg8FpzT+EADQEAAAMAAAABAA8AAAEBAAMAAAABAA8AAAEC
AAMAAAAEAAAELgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQA
AAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAAB
AA8AAAEXAAQAAAABAAADhAEcAAMAAAABAAEAAAFSAAMAAAABAAIA
AAFTAAMAAAAEAAAENgAAAAAACAAIAAgACAABAAEAAQAB
</data>
<key>ScratchpadPboardType</key>
<string>ElementCollectionsArchivedElementPboardType</string>
<key>ScratchpadTitle</key>
<string>TB Scrolling Emulator Enabler</string>
<key>ScratchpadVirtualDevices</key>
<array/>
</dict>
<dict>
<key>ScratchpadContent</key>
<array>
<dict>
<key>Connections</key>
<dict>
<key>331915990499631744</key>
<string>331916988817026560</string>
<key>331915990499961728</key>
<string>331916994367579392</string>
<key>331916945696901248</key>
<string>331916966110411264</string>
<key>331916966110411392</key>
<string>331916089443579392</string>
<key>331916988817026688</key>
<string>331916945696901120</string>
<key>331916994366937728</key>
<string>331916994367265280</string>
<key>331916994367265408</key>
<string>331916088749820416</string>
<key>331916994367579520</key>
<string>331916994366937600</string>
</dict>
<key>Elements</key>
<array>
<dict>
<key>ElementTypeID</key>
<integer>7</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<false/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>0</integer>
<key>HIDDeviceManufacturer</key>
<string>OrderedBytes</string>
<key>HIDDeviceMaxCookie</key>
<integer>8</integer>
<key>HIDDeviceProduct</key>
<string>Scroller</string>
<key>HIDDeviceProductID</key>
<integer>0</integer>
<key>HIDDeviceSerialNumber</key>
<string>12D73A0C99F</string>
<key>HIDDeviceTransport</key>
<string></string>
<key>HIDDeviceUsage</key>
<integer>2</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>0</integer>
<key>HIDDeviceVersion</key>
<integer>256</integer>
</dict>
<key>HIDElementCookie</key>
<integer>7</integer>
<key>HIDElementMaxValue</key>
<integer>127</integer>
<key>HIDElementMinValue</key>
<integer>-127</integer>
<key>HIDElementName</key>
<string>Wheel</string>
<key>HIDElementRelativeValue</key>
<true/>
<key>HIDElementSize</key>
<integer>8</integer>
<key>HIDElementType</key>
<integer>1</integer>
<key>HIDElementUsage</key>
<integer>56</integer>
<key>HIDElementUsagePage</key>
<integer>1</integer>
</dict>
<key>Identifier</key>
<string>331915990499631616</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{370, 197}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>VirtualAxis</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
<key>VirtualSourceType</key>
<integer>2</integer>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>8</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<false/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>0</integer>
<key>HIDDeviceManufacturer</key>
<string>OrderedBytes</string>
<key>HIDDeviceMaxCookie</key>
<integer>8</integer>
<key>HIDDeviceProduct</key>
<string>Scroller</string>
<key>HIDDeviceProductID</key>
<integer>0</integer>
<key>HIDDeviceSerialNumber</key>
<string>12D73A0C99F</string>
<key>HIDDeviceTransport</key>
<string></string>
<key>HIDDeviceUsage</key>
<integer>2</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>0</integer>
<key>HIDDeviceVersion</key>
<integer>256</integer>
</dict>
<key>HIDElementCookie</key>
<integer>8</integer>
<key>HIDElementMaxValue</key>
<integer>127</integer>
<key>HIDElementMinValue</key>
<integer>-127</integer>
<key>HIDElementName</key>
<string>Z-Axis</string>
<key>HIDElementRelativeValue</key>
<true/>
<key>HIDElementSize</key>
<integer>8</integer>
<key>HIDElementType</key>
<integer>1</integer>
<key>HIDElementUsage</key>
<integer>50</integer>
<key>HIDElementUsagePage</key>
<integer>1</integer>
</dict>
<key>Identifier</key>
<string>331915990499961600</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{140, 197}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>VirtualAxis</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
<key>VirtualSourceType</key>
<integer>2</integer>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>7</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<false/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>-98107392</integer>
<key>HIDDeviceManufacturer</key>
<string>CH PRODUCTS</string>
<key>HIDDeviceMaxCookie</key>
<integer>8</integer>
<key>HIDDeviceProduct</key>
<string>CH USB TRACKBALL</string>
<key>HIDDeviceProductID</key>
<integer>63232</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>2</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>36358</integer>
<key>HIDDeviceVersion</key>
<integer>0</integer>
</dict>
<key>HIDElementCookie</key>
<integer>7</integer>
<key>HIDElementMaxValue</key>
<integer>127</integer>
<key>HIDElementMinValue</key>
<integer>-127</integer>
<key>HIDElementName</key>
<string>X-Axis</string>
<key>HIDElementRelativeValue</key>
<true/>
<key>HIDElementSize</key>
<integer>8</integer>
<key>HIDElementType</key>
<integer>1</integer>
<key>HIDElementUsage</key>
<integer>48</integer>
<key>HIDElementUsagePage</key>
<integer>1</integer>
</dict>
<key>Identifier</key>
<string>331916088749820416</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{140, 90}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Axis</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>ElementTypeID</key>
<integer>8</integer>
<key>Enabled</key>
<true/>
<key>FilterRepeatedEvents</key>
<false/>
<key>HIDElementAttributes</key>
<dict>
<key>HIDDeviceAttributes</key>
<dict>
<key>HIDDeviceLocationID</key>
<integer>-98107392</integer>
<key>HIDDeviceManufacturer</key>
<string>CH PRODUCTS</string>
<key>HIDDeviceMaxCookie</key>
<integer>8</integer>
<key>HIDDeviceProduct</key>
<string>CH USB TRACKBALL</string>
<key>HIDDeviceProductID</key>
<integer>63232</integer>
<key>HIDDeviceSerialNumber</key>
<string></string>
<key>HIDDeviceTransport</key>
<string>USB</string>
<key>HIDDeviceUsage</key>
<integer>2</integer>
<key>HIDDeviceUsagePage</key>
<integer>1</integer>
<key>HIDDeviceVendorID</key>
<integer>36358</integer>
<key>HIDDeviceVersion</key>
<integer>0</integer>
</dict>
<key>HIDElementCookie</key>
<integer>8</integer>
<key>HIDElementMaxValue</key>
<integer>127</integer>
<key>HIDElementMinValue</key>
<integer>-127</integer>
<key>HIDElementName</key>
<string>Y-Axis</string>
<key>HIDElementRelativeValue</key>
<true/>
<key>HIDElementSize</key>
<integer>8</integer>
<key>HIDElementType</key>
<integer>1</integer>
<key>HIDElementUsage</key>
<integer>49</integer>
<key>HIDElementUsagePage</key>
<integer>1</integer>
</dict>
<key>Identifier</key>
<string>331916089443579392</string>
<key>IncorrectModifierValue</key>
<integer>0</integer>
<key>Location</key>
<string>{370, 90}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>Axis</string>
<key>UpdateOnModifierChange</key>
<true/>
<key>UseIncorrectModifierValue</key>
<false/>
</dict>
<dict>
<key>CenterValue</key>
<integer>0</integer>
<key>DeadbandSize</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331916945696901120</string>
<key>Location</key>
<string>{370, 141}</string>
<key>LowerInputLimit</key>
<integer>-32</integer>
<key>LowerOutputLimit</key>
<integer>-1</integer>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>JoystickAxisCalib</string>
<key>UpperInputLimit</key>
<integer>32</integer>
<key>UpperOutputLimit</key>
<integer>1</integer>
<key>UseCenterValue</key>
<true/>
<key>UseDeadband</key>
<true/>
</dict>
<dict>
<key>CenterValue</key>
<integer>0</integer>
<key>DeadbandSize</key>
<integer>2</integer>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331916966110411264</string>
<key>Location</key>
<string>{370, 113}</string>
<key>LowerInputLimit</key>
<integer>-32</integer>
<key>LowerOutputLimit</key>
<integer>-1</integer>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>JoystickAxisCalib</string>
<key>UpperInputLimit</key>
<integer>32</integer>
<key>UpperOutputLimit</key>
<integer>1</integer>
<key>UseCenterValue</key>
<true/>
<key>UseDeadband</key>
<true/>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331916988817026560</string>
<key>Input Count</key>
<integer>1</integer>
<key>Location</key>
<string>{370, 169}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>IntegerProduct</string>
<key>UseValueOffset</key>
<true/>
<key>ValueOffset</key>
<real>-1</real>
</dict>
<dict>
<key>CenterValue</key>
<integer>0</integer>
<key>DeadbandSize</key>
<integer>2</integer>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331916994367265280</string>
<key>Location</key>
<string>{140, 113}</string>
<key>LowerInputLimit</key>
<integer>-32</integer>
<key>LowerOutputLimit</key>
<integer>-1</integer>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>JoystickAxisCalib</string>
<key>UpperInputLimit</key>
<integer>32</integer>
<key>UpperOutputLimit</key>
<integer>1</integer>
<key>UseCenterValue</key>
<true/>
<key>UseDeadband</key>
<true/>
</dict>
<dict>
<key>CenterValue</key>
<integer>0</integer>
<key>DeadbandSize</key>
<integer>0</integer>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331916994366937600</string>
<key>Location</key>
<string>{140, 141}</string>
<key>LowerInputLimit</key>
<integer>-32</integer>
<key>LowerOutputLimit</key>
<integer>-1</integer>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>JoystickAxisCalib</string>
<key>UpperInputLimit</key>
<integer>32</integer>
<key>UpperOutputLimit</key>
<integer>1</integer>
<key>UseCenterValue</key>
<true/>
<key>UseDeadband</key>
<true/>
</dict>
<dict>
<key>Enabled</key>
<true/>
<key>Identifier</key>
<string>331916994367579392</string>
<key>Input Count</key>
<integer>1</integer>
<key>Location</key>
<string>{140, 169}</string>
<key>Note</key>
<dict>
<key>Visible</key>
<true/>
</dict>
<key>Type</key>
<string>IntegerProduct</string>
<key>UseValueOffset</key>
<true/>
<key>ValueOffset</key>
<real>-1</real>
</dict>
</array>
<key>Enabled</key>
<false/>
<key>Identifier</key>
<string>331915990497668864</string>
<key>ResetBeforeDisable</key>
<false/>
<key>ResetBeforeEnable</key>
<false/>
<key>Title</key>
<string>TB Scrolling Emulator</string>
<key>Type</key>
<string>Page</string>
</dict>
</array>
<key>ScratchpadDeviceTypes</key>
<array>
<string>0:0:1:2:12D73A0C99F</string>
<string>36358:63232:1:2</string>
</array>
<key>ScratchpadIdentifier</key>
<string>49B33D5B4E2AF00</string>
<key>ScratchpadImageData</key>
<data>
TU0AKgAAA4xTakrhaIVc8GaDWvBlglnwZYJZ8GWCWvBmglrwZoJa
8GaDWvBmg1rwZ4Nb8GeDW/Bng1vwaYVd8FdvTuFnhFv0hap1/4Oo
dP+Ep3T/hKl1/4Kocf+ApnD/gaZw/4Kocv+EqnT/hal1/4Sodf+E
qHX/h6t3/22LYfRmg1vwhKh1/4Klc/+CpnP/fJ1u/4megf+RpIn/
k6aL/42hhP95lW3/eZ1q/4Kmc/+BpXL/hKh1/2uJX/Bng1vwhKh1
/4Glcv+ApnH/dZNo/93d3f/49/n/8e/y//Xy9v/n6Of/mqmT/3ea
aP+BpXL/hKh0/2yJX/BmglrwhKh0/4Glcv+CpnL/d5Vr/+vs6v/R
1M//gJZ3/46hhv/d4Nv//fz+/4yigv9/pHD/hal2/2uKYPBlglrw
g6h0/4Glcv+BpXL/dpRp/+rr6v/EysH/d5tn/3eeZv+SpIr/////
/6a1oP93nWj/hal1/2uJYPBkgVjwgaZy/4Ckcf+ApXH/dpRp/+rr
6//CyL//bZFe/22UXf+fr5j//////5+wmP94nmj/g6hz/2qIXfBm
g1rwg6h0/4Glcv+BpnL/dpRq/+fo5v/c39v/orCb/7O+rv/z8/P/
5ebl/36ac/+CpnL/hKh1/2yJX/BnhFzwhal2/4Klc/+BpnL/dZNp
/+Hj4f///v//+/n8//z6/f/M0cr/gJh3/32hbv+Ep3X/hql3/22K
YfBlglrwgqdz/3+jcP9/pG//dJNn/+nq6f/M0Mr/e5Rx/32Ycf92
l2j/faJt/4Glcv+ApHH/hKh0/2uJX/BmglvwhKh0/4Glcv+BpnL/
dpVp/+rr6v/FysL/dZpn/4Gmcf+CpnL/gqVz/4Klc/+CpXP/hKh1
/2uJX/Bmglrwg6dz/4Gkcv+BpnL/dpRp//Lx8v/Lz8n/eJpp/4Km
c/+CpXP/gaVy/4Gkcv+ApHL/g6d0/2qJXvBmg1vwhKh1/4Gkcv+B
pnL/d5dq/7S7sf+fqpr/e51s/4Kmc/+CpXP/gaVy/4Klc/+CpXP/
hal2/2yKYPBohVz0h6x4/4Wpdv+Gqnb/hal2/32fbv9+oW//hal1
/4Wpdf+EqHX/hal2/4Wpdv+FqXX/h6x4/26MYfRWbkvhbItg8GuJ
XvBriV/wa4lf8GyKX/BsimDwbIlf8GuJXvBriV/wa4lf8GuJX/Br
iV/wbYtg8FpzT+EADQEAAAMAAAABAA8AAAEBAAMAAAABAA8AAAEC
AAMAAAAEAAAELgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQA
AAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAAB
AA8AAAEXAAQAAAABAAADhAEcAAMAAAABAAEAAAFSAAMAAAABAAIA
AAFTAAMAAAAEAAAENgAAAAAACAAIAAgACAABAAEAAQAB
</data>
<key>ScratchpadPboardType</key>
<string>ElementCollectionsArchivedElementPboardType</string>
<key>ScratchpadTitle</key>
<string>TB Scrolling Emulator</string>
<key>ScratchpadVirtualDevices</key>
<array>
<string>12D73A0C99F</string>
</array>
</dict>
</array>
<key>VirtualDevice</key>
<array>
<dict>
<key>ScratchpadContent</key>
<array>
<dict>
<key>ButtonCount</key>
<integer>2</integer>
<key>Class</key>
<string>VirtualMouse</string>
<key>Name</key>
<string>Scroller</string>
<key>ProductID</key>
<integer>0</integer>
<key>ScrollWheel</key>
<true/>
<key>SerialNumber</key>
<string>1294725073311</string>
<key>Started</key>
<true/>
<key>VendorID</key>
<integer>0</integer>
<key>ZAxis</key>
<true/>
</dict>
</array>
<key>ScratchpadIdentifier</key>
<string>12D73A0C99F</string>
<key>ScratchpadImageData</key>
<data>
TU0AKgAAA4wtQEAAL0VFAC5ERAAwREQALkJCACxBQRc9WVmJUXV1
6D9bW5IvQ0MdLUJCAC5ERAAwREQAMEZGAC1AQAAtQUEAL0REACxA
QAAuQkINO1VVc1h9fehun5//d6qq/3CgoP9Zf3/tPFdXfC1CQhEt
QUEAMEZGAC1AQAAsPz8ALUFBEjtVVXlOdXXhXo6O/26hof91qKj/
dKam/3aoqP9xpaX/YJCQ/051deY8V1eALkNDGCo+PgA1S0tpVHp6
42WVlf+OpaX/vcjI/4mgoP9nmZn/cqam/2menv95l5f/t8PD/56v
r/9mk5P/Vn196TZNTWpSdnbsdqqq/2mbm/+1wMD//////+3s7P91
lpb/caen/2eRkf/O0tL//////9ba2v9smZn/d62t/1R4eN1Uenrs
dKio/2eZmf+3wsL///7+//r4+P+uvLz/XpKS/46mpv/59/f/9/b2
/9fc3P9rl5f/daqq/1Z7e91SeHjscqen/2eZmf+6xcX/5+jo/6Wt
rf/x8fH/ZIGB/9LY2P/BxcX/y87O/93h4f9pl5f/c6io/1R5ed1T
eXnsdKio/2eamv+6xcX/7vDw/198fP/j5eX/2Nra/+rq6v9viYn/
zdTU/97h4f9smJj/daqq/1V6et1Venrsdqmp/2iamv+6xcX/8PHx
/12Hh/+itLT//////7bCwv9biIj/09nZ/93g4P9smJj/dqqq/1d7
e91TeXnscaen/2SYmP+5xMT/8PDw/2eTk/9umZn/obCw/3aamv9o
mJj/09fX/93g4P9ql5f/dKmp/1V6et1TeHjtdqur/2ibm/+5xMT/
8PDw/2mTk/9vpaX/Y5aW/26iov9smpr/0tfX/97g4P9smJj/dqys
/1V6et04UVGFW4SE82iYmP+fr6//wcfH/2qUlP9zp6f/dKam/3Sn
p/9sm5v/rbe3/7fAwP9plZX/XYeH+DhRUYQqPj4AL0REJj9cXJRV
fHzwZ5SU/3Snp/90pqb/cqWl/3Ompv90qKj/aZeX/1Z8fPNBXl6c
L0RELCo9PQAtQUEAL0REACxAQAAwRUUfQV1dkV+Hh/dyo6P/d6qq
/3KkpP9giYn5QV9fmi9FRSQsQEAALkNDACxAQAAtQUEAMEVFAC9E
RAAwREQALkFBADBFRS1EYWGfV3196kVkZKUvREQzLUFBAC9ERAAv
REQAL0REACxAQAAADQEAAAMAAAABAA8AAAEBAAMAAAABAA8AAAEC
AAMAAAAEAAAELgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQA
AAABAAAACAESAAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAAB
AA8AAAEXAAQAAAABAAADhAEcAAMAAAABAAEAAAFSAAMAAAABAAIA
AAFTAAMAAAAEAAAENgAAAAAACAAIAAgACAABAAEAAQAB
</data>
<key>ScratchpadPboardType</key>
<string>VirtualDeviceArchivedDeviceArrayPboardType</string>
<key>ScratchpadTitle</key>
<string>Scroller</string>
</dict>
</array>
</dict>
</plist>

I use it for DT225, and in slightly modified form for Endurapro pointing stick (emulates scroll when both mouse buttons are pressed, while DT225 switches between cursor and scroll mode by pressing left and right buttons chord).