Author Topic: DT225 Scroll Programming  (Read 5384 times)

0 Members and 1 Guest are viewing this topic.

Offline didjamatic

  • Thread Starter
  • Posts: 1352
DT225 Scroll Programming
« on: Mon, 22 March 2010, 16:26:32 »
I saw this link 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?
« Last Edit: Mon, 22 March 2010, 16:39:29 by didjamatic »
IBM F :: IBM M :: Northgate :: Cherry G80 :: Realforce :: DAS 4

Offline didjamatic

  • Thread Starter
  • Posts: 1352
DT225 Scroll Programming
« Reply #1 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.
IBM F :: IBM M :: Northgate :: Cherry G80 :: Realforce :: DAS 4

Offline chuckading

  • Posts: 95
DT225 Scroll Programming
« Reply #2 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.

Offline ricercar

  • * Elevated Elder
  • Posts: 1697
  • Location: Silicon Valley
  • mostly abides
DT225 Scroll Programming
« Reply #3 on: Thu, 25 March 2010, 18:27:18 »
Quote from: webwit;166838
Who needs volume control?


Anyone on a diet.
I trolled Geekhack and all I got was an eponymous SPOS.

Offline hyperlinked

  • Posts: 924
DT225 Scroll Programming
« Reply #4 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.
-

Topre: Realforce 103U Cherry: Filco Majestouch 104 (Brown), Ione Scorpius M10 (Blue)
Buckling Spring: IBM Model M1391401 ALPS: Apple Extended Keyboard II (Cream), ABS M1 (Fukka/Black), MicroConnectors Flavored USB (Black)
Domes: Matias Optimizer, Kensington ComfortType, Microsoft Internet Keyboard
Scissors: Apple Full Sized Aluminum
Pointy Stuff: Razer Imperator, Razer Copperhead, DT225 Trackball, Apple Magic Mouse, Logitech MX1000, Apple Mighty Mouse
Systems: MacPro, MacBook Pro, ASUS eeePC netbook, Dell D600 laptop, a small cluster of Linux Web servers
Displays: Apple Cinema Display 30", Apple Cinema Display 23"
Ergo Devices: Zody Chair, Nightingale CXO, Somaform, Theraball, 3M AKT180LE Keyboard Tray

Offline didjamatic

  • Thread Starter
  • Posts: 1352
DT225 Scroll Programming
« Reply #5 on: Thu, 25 March 2010, 19:30:52 »
Mine is PS/2
IBM F :: IBM M :: Northgate :: Cherry G80 :: Realforce :: DAS 4

Offline chuckading

  • Posts: 95
DT225 Scroll Programming
« Reply #6 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.

Offline EverythingIBM

  • Posts: 1269
DT225 Scroll Programming
« Reply #7 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?
Keyboards: '86 M, M5-2, M13, SSK, F AT, F XT

Offline platon

  • Posts: 59
DT225 Scroll Programming
« Reply #8 on: Fri, 26 March 2010, 18:08:51 »
Quote from: EverythingIBM;167147
What about the linux guys?


Linux guys custom develop their own!
Filco Majestouch brown no nkro, Filco tenkeyless white lettered with browns, IBM Model M 1392934 Space Saving \'91 x 2, Cherry G80-3000 LSCEU-2, Chicony KB-5181, SGI Granite 9500900, IBM Model M 52G9658 \'94, HHKB Lite 2 for Mac, SGI RT6856T (rubber dome), Logitech Illuminated Keyboard, CH DT225 trackball, SGI 063-0009-001 mouse

Offline kishy

  • Posts: 1576
  • Location: Windsor, ON Canada
  • Eye Bee M
    • http://kishy.ca/
DT225 Scroll Programming
« Reply #9 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.
Enthusiast of springs which buckle noisily: my keyboards
Want to learn about the Kishsaver?
kishy.ca

Offline EverythingIBM

  • Posts: 1269
DT225 Scroll Programming
« Reply #10 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.
Keyboards: '86 M, M5-2, M13, SSK, F AT, F XT

Offline kishy

  • Posts: 1576
  • Location: Windsor, ON Canada
  • Eye Bee M
    • http://kishy.ca/
DT225 Scroll Programming
« Reply #11 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?
Enthusiast of springs which buckle noisily: my keyboards
Want to learn about the Kishsaver?
kishy.ca

Offline ricercar

  • * Elevated Elder
  • Posts: 1697
  • Location: Silicon Valley
  • mostly abides
DT225 Scroll Programming
« Reply #12 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. 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.
« Last Edit: Fri, 26 March 2010, 22:40:44 by ricercar »
I trolled Geekhack and all I got was an eponymous SPOS.

Offline JulienC

  • Posts: 73
  • Location: Montreal, Canada
  • Esc Artist
DT225 Scroll Programming
« Reply #13 on: Sat, 27 March 2010, 22:10:11 »
Quote from: ripster;166885
Check this page 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 ?
« Last Edit: Wed, 09 October 2013, 11:40:26 by JulienC »

HHKB

Offline bootstrap

  • Posts: 44
    • epiguru.com - My Personal Website
DT225 Scroll Programming
« Reply #14 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?
The Best WordPress Theme Ever | Kinesis Contoured Model 100 | IBM Model F 1387033 "Space Unsaver" | CH Products DT225 Trackball x 2

Offline bootstrap

  • Posts: 44
    • epiguru.com - My Personal Website
CH Products DT225 Trackball: Scrolling on Linux
« Reply #15 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.
The Best WordPress Theme Ever | Kinesis Contoured Model 100 | IBM Model F 1387033 "Space Unsaver" | CH Products DT225 Trackball x 2

Offline czarek

  • Posts: 627
  • Location: Poland
  • Keep the momentum going!
    • FalbaTech
DT225 Scroll Programming
« Reply #16 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).
My little ErgoDox / GH60 factory: http://falbatech.pl