A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Questions and answers about 3Dconnexion devices on Windows.

Moderator: Moderators

Post Reply
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

I am looking to create a single cfg file in ~\AppData\Roaming\3Dconnexion\3DxWare\Cfg, that will apply to all applications on my system that do no have their own explicit config file in ~\AppData\Roaming\3Dconnexion\3DxWare\Cfg. Something like a 'default' profile.

So if I have the following applications on my system
  • Notepad
  • Firefox
  • File Explorer
  • Maya
  • Zbrush

I would like the "default" profile to only apply to the first 3 applications, the later 2 having their own unique profiles. Currently I am having to create a profile for each application like so:

Code: Select all

...\Roaming\3Dconnexion\3DxWare\Cfg\notepad.xml
...\Roaming\3Dconnexion\3DxWare\Cfg\firefox.xml
...\Roaming\3Dconnexion\3DxWare\Cfg\file Explorer.xml
...\Roaming\3Dconnexion\3DxWare\Cfg\maya.xml
...\Roaming\3Dconnexion\3DxWare\Cfg\zbrush.xml
I would like to instead, do something like the following:

Code: Select all

...\Roaming\3Dconnexion\3DxWare\Cfg\default.xml
...\Roaming\3Dconnexion\3DxWare\Cfg\maya.xml
...\Roaming\3Dconnexion\3DxWare\Cfg\zbrush.xml
This way the default.xml profile should apply to any application, except for Maya and Zbrush.

I tried achieving this with a global.xml config, but I learnt it is not the right solution, as it overrides maya.xml and zbrush.xml, I still need the flexibility of defining individual settings for Maya and Zbrush

While I was looking around at both ~\AppData\Roaming\3Dconnexion\3DxWare\Cfg and C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg, I discovered there is a already some kind of default profile in place that applies to applications except for those that a have a user config in Appdata/Roaming.

For example, I tired copying AppDefCfg_KMJ.xml to my Appdata/Roaming directory and slightly changing it, it did not seem to act as a "default" profile


I would appreciate an example or any help in achieving this. Thanks!
jwick
Moderator
Moderator
Posts: 3350
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by jwick »

There are a few ways of addressing this depending on how specific you want to be.

You could create a single %appdata% file that names each executable you want addressed (notepad.exe, etc). It gives you the most control, but is not what you asked for.

Or, as you suggested, you can make your own version of one of the files that gets used for these applications. (If an app isn't a 3D-mouse-aware app, the KMJ (Keyboard, Mouse, Joystick) cfg gets assigned).
I've followed your suggestion of putting a [modified] copy of AppDefCfg_KMJ.xml into %appdata%.

Changes were required to that file.
Here's the top:

Code: Select all

<AppDefCfg  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Default="false" CfgFormatVersion="1.3" ThisFileVersion="2.0">
  <CfgProperties>
    <ID>ID_Default_KMJ_Cfg</ID>
    <Name>STR_DEFAULT_KMJ</Name>
    <InheritsFromID>ID_Default_KMJ_Cfg</InheritsFromID>
  </CfgProperties>
  <AppInfo>
    <Signature>
      <Transport>KMJ</Transport>
    </Signature>
    <Options>
      <SendDeviceChangeEvent>false</SendDeviceChangeEvent>
    </Options>
  </AppInfo>
  ...
  and then I changed the X axis to send a MouseX to see that it was working:

    <Devices>
    <Device>
      <ID>ID_Standard_3D_Mouse</ID>
      <Name>Standard 3D Mouse</Name>
      <CurrentAxisBank>Default</CurrentAxisBank>
      <AxisBank Default="true">
        <ID>Default</ID>
        <Name>STR_DEFAULT_BANK</Name>
        <Axis>
          <Enabled>true</Enabled>
          <Input>
            <ActionID>HIDMultiAxis_X</ActionID>
            <Min>-512</Min>
            <Max>511</Max>
          </Input>
          <Output>
            <ActionID>HIDMouse_X</ActionID>
          </Output>
        </Axis>
        <Axis>
        ...
Turn on the driver log file (3Dx systray icon), and baretail your log file (%localappdata%\3Dconnexion\3DxWare\3DxService.log).
Keep in mind our GUI may not completely follow what you are doing. You are skiing off the trail. Someday the GUI may catch up with you.
And this being unexposed functionality, there is no guarantee that we won't change, or break, it in the future.

When I start notepad++ in my example here, the driver will log where it is looking for settings.
E.g.,

Code: Select all

00000100 3/5/2024 7:25:53.012: CfgChain: 
	ID=ID_Global_Cfg	FileName=C:\Users\jwick.3DCONNEXION\AppData\Roaming\3Dconnexion\3DxWare\Cfg\Global.xml	FileExists=true	InheritsFromID=ID_Global_Cfg
	ID=ID_Global_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Global.xml	FileExists=true	InheritsFromID=
	ID=ID_EnUS_LocalizationTables	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\en-US.xml	FileExists=true	InheritsFromID=
	ID=ID_Notepad++	FileName=C:\Users\jwick.3DCONNEXION\AppData\Roaming\3Dconnexion\3DxWare\Cfg\Notepad++.xml	FileExists=true	InheritsFromID=ID_Notepad++
	ID=ID_Notepad++	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Notepad++.xml	FileExists=true	InheritsFromID=ID_Default_KMJ_Cfg
	ID=ID_Default_KMJ_Cfg	FileName=C:\Users\jwick.3DCONNEXION\AppData\Roaming\3Dconnexion\3DxWare\Cfg\AppDefCfg_KMJ.xml	FileExists=true	InheritsFromID=ID_Default_KMJ_Cfg
	ID=ID_Default_KMJ_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppDefCfg_KMJ.xml	FileExists=true	InheritsFromID=ID_Default_Cfg
	ID=ID_Default_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppDefCfg.xml	FileExists=true	InheritsFromID=ID_Base_Cfg
	ID=ID_Base_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Base.xml	FileExists=true	InheritsFromID=
Where this says it is looking in two Global.xml files (user then default), then the string table, then two Notepad++.xml files (user then default), then two AppDefCfg_KMJ files, then a universal default cfg, then the Base cfg.
It will use the setting it finds first in that chain of cfgs.

When I run notepad++, I DO NOT get MouseX on my 3D mouse X axis. Why not? Aha, look at our PF(program files)/notepad++.xml. We define that 3D mouse X is disabled and assigned to a 3D mouse axis (which does nothing in notepad++ obviously). That assignment is found before the assignment in %appdata%/AppDefCfg_KMJ.xml. So in this case, I need to delete that assignment from PF/notepad++.xml and it will trickle down to find the MouseX assignment in my %appdata%/AppDefCfg_KMJ.xml. (And I can remind myself that this assignment should have never been put into our default notepad++.xml.)

When I run baretail (no cfg from us), I get MouseX on my 3D mouse X axis. As expected.

These are the sort of problems you might encounter when we ship a default cfg file (FireFox, Explorer, etc).
Searches are done one axis, and one button, at a time. There's a lot of flexibility there, if you can keep track of what is happening.
Baretail is your friend.

If you name the executables in your %appdata% file, you will have a different CfgChain that will avoid the default file.

It would be nice if the GUI would help you with all this...
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

Thanks for the guide, I have tried my best to follow it, I think I may have a thing or two wrong as I could not get it to work.

I created a AppDefCfg_KMJ.xml file following your sample xml and placed it at /appdata/. I then stopped the 3dx service with:

Code: Select all

3DxService.exe -quiet -shutdown
Upon restarting the service by opening the 3Dx GUI window, enabling logging via the task tray, two additional files get created in \appdata\:

Code: Select all

...\AppData\Roaming\3Dconnexion\3DxWare\Cfg\AppDefCfg_KMJ.xml
...\AppData\Roaming\3Dconnexion\3DxWare\Cfg\Global.xml
...\AppData\Roaming\3Dconnexion\3DxWare\Cfg\UserInfo.xml
Using baretail to read the log fie, I got some lines similar to what you shared:

Code: Select all

...
00000400 3/5/2024 18:9:49.015: CreateCfgChain: CfgChain is
	ID=ID_Global_Cfg	FileName=C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\Global.xml	FileExists=true	InheritsFromID=ID_Global_Cfg
	ID=ID_Global_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Global.xml	FileExists=true	InheritsFromID=
	ID=ID_EnUS_LocalizationTables	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\en-US.xml	FileExists=true	InheritsFromID=
	ID=ID_WindowsTerminal	FileName=C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\WindowsTerminal-KMJ.xml	FileExists=false	InheritsFromID=ID_Default_KMJ_Cfg
	ID=ID_Default_KMJ_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppDefCfg_KMJ.xml	FileExists=true	InheritsFromID=ID_Default_Cfg
	ID=ID_Default_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppCfg.xml	FileExists=true	InheritsFromID=ID_Base_Cfg
	ID=ID_Base_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Base.xml	FileExists=true	InheritsFromID=

00000040 3/5/2024 18:9:49.023: RefreshAffectedCfgs: Rereading C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml
00000400 3/5/2024 18:9:49.023: Cfg::Cfg(pCfgInfo:ExecutableName: PureRef.exe, appSig:PureRef.exe/PID=11680/Focus=0x291446/Cursor=0x291446) Filename:C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml
00000400 3/5/2024 18:9:49.023: Cfg::Init: m_pCfgInfo:ExecutableName: PureRef.exe, m_AppSignature:PureRef.exe/PID=11680/Focus=0x291446/Cursor=0x291446) Filename:C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml
00000040 3/5/2024 18:9:49.024: TlXmlDoc::TlXmlDoc(): Error: Giving up trying to open file C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml.  errMsg: The system cannot locate the object specified.
...
And then as I move the device X axis the window under the mouse pointer get scrolled and these lines get printed:

Code: Select all

...
00000020 3/5/2024 19:9:24.282: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.075000, pressLevel=0.572825
00000020 3/5/2024 19:9:24.297: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-78
00000020 3/5/2024 19:9:24.297: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.078000, pressLevel=0.575758
00000020 3/5/2024 19:9:24.313: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-78
00000020 3/5/2024 19:9:24.313: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.078000, pressLevel=0.575758
00000020 3/5/2024 19:9:24.329: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-80
00000020 3/5/2024 19:9:24.329: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.080000, pressLevel=0.577713
00000020 3/5/2024 19:9:24.345: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-78
00000020 3/5/2024 19:9:24.345: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.078000, pressLevel=0.575758
00000080 3/5/2024 19:9:24.345: SendMouseAxisOrWheelEvent: MouseX=0, MouseY=0, VScroll=-1, HScroll=0, Buttons Mask Change=0x0, Buttons Status=0x0 
00000020 3/5/2024 19:9:24.362: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-74
00000020 3/5/2024 19:9:24.362: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.074000, pressLevel=0.571848
00000020 3/5/2024 19:9:24.378: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-62
00000020 3/5/2024 19:9:24.378: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.062000, pressLevel=0.560117
00000020 3/5/2024 19:9:24.393: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-53
00000020 3/5/2024 19:9:24.394: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.053000, pressLevel=0.551320
00000020 3/5/2024 19:9:24.409: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-42
00000020 3/5/2024 19:9:24.409: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.042000, pressLevel=0.540567
00000020 3/5/2024 19:9:24.425: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-26
00000020 3/5/2024 19:9:24.426: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.026000, pressLevel=0.524927
00000020 3/5/2024 19:9:24.441: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-15
00000020 3/5/2024 19:9:24.442: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.015000, pressLevel=0.514174
00000020 3/5/2024 19:9:24.457: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-16
00000020 3/5/2024 19:9:24.457: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.016000, pressLevel=0.515152
00000020 3/5/2024 19:9:24.473: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-18
00000020 3/5/2024 19:9:24.474: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.018000, pressLevel=0.517107
00000004 3/5/2024 19:9:24.489: Device: \\?\HID#VID_256F&PID_C62F#9&83445F7&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030}: EPS mean=62.504801, standardDeviation=0.078185
00000020 3/5/2024 19:9:24.490: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=0
00000020 3/5/2024 19:9:24.490: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=0.000000, pressLevel=0.499511
00000004 3/5/2024 19:9:26.777: HIDDev.ProcessInputReport: Battery Level Packet: 14 0 from \\?\HID#VID_256F&PID_C62F#9&83445F7&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030}
00000004 3/5/2024 19:9:26.777: UdCtlDevice_SetBatteryState_AllMatching: Setting (actual) device \\?\HID#VID_256F&PID_C62F#9&83445F7&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030} life to 14, charging to 0
00001000 3/5/2024 19:9:26.777: UdProcessCommEvent: DEVICE_BATTERY_EVENT: Optimization: value didn't change.  Not writing files.
...
I am not sure if the above messages correspond to the action in the Output node:

Code: Select all

 <Output>
	<ActionID>HIDMouse_X</ActionID>
 </Output>
I am not sure what HIDMouse_X is supposed to do, I tried replacing it, with something I understand:

Code: Select all

 <Output>
	<ActionID>KB_Keystroke</ActionID>
	<Scale>3.00</Scale>
	<RepeatStyle>Auto</RepeatStyle>
	<KeyStroke><Key>1E</Key></KeyStroke>
 </Output>
But this does not seem to get picked up, even after I stopped, then started the service, X axis is still performing wheel scrolling instead of typing 1.
There is still a AppDefCfg_KMJ.xml over at C:\Program Files I made a backup of it and deleted it but upon restarting the service, it complains with message box, so I restored it:

Code: Select all

Exception: Object reference not set to an instance of an object.
For completeness sake, the full content of the AppDefCfg_KMJ.xml file I placed in /appdata/ is:

Code: Select all

<AppDefCfg  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Default="false" CfgFormatVersion="1.3" ThisFileVersion="2.0">
  <CfgProperties>
    <ID>ID_Default_KMJ_Cfg</ID>5
    <Name>STR_DEFAULT_KMJ</Name>
    <InheritsFromID>ID_Default_KMJ_Cfg</InheritsFromID>
  </CfgProperties>
  <AppInfo>
    <Signature>
      <Transport>KMJ</Transport>
    </Signature>
    <Options>
      <SendDeviceChangeEvent>false</SendDeviceChangeEvent>
    </Options>
  </AppInfo>
    <Devices>
    <Device>
      <ID>ID_Standard_3D_Mouse</ID>
      <Name>Standard 3D Mouse</Name>
      <CurrentAxisBank>Default</CurrentAxisBank>
      <AxisBank Default="true">
        <ID>Default</ID>
        <Name>STR_DEFAULT_BANK</Name>
        <Axis>
          <Enabled>true</Enabled>
          <Input>
            <ActionID>HIDMultiAxis_X</ActionID>
            <Min>-512</Min>
            <Max>511</Max>
          </Input>
          <Output>
            <ActionID>HIDMouse_X</ActionID>
          </Output>
        </Axis>
      </AxisBank>
    </Device>
  </Devices>
    <AuthorInfo>
    <DriverVersion>17.8.20.20889</DriverVersion>
    <LastChange>
      <Tool>3DxSmartUI.exe</Tool>
      <Version>1.2.24106.20869</Version>
      <Date>5/3/2024 3:59:30 PM UTC</Date>
      <User>user1</User>
    </LastChange>
  </AuthorInfo>
</AppDefCfg>

jwick wrote: Fri May 03, 2024 5:07 am These are the sort of problems you might encounter when we ship a default cfg file (FireFox, Explorer, etc).
Searches are done one axis, and one button, at a time. There's a lot of flexibility there, if you can keep track of what is happening.
Baretail is your friend.
Sounds really intresting for sure, and I will be sure to take a close look when I get my bearings together, thanks!
jwick
Moderator
Moderator
Posts: 3350
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by jwick »

You have a typo, at least, in that AppDefCfg_KMJ.xml listing:

Code: Select all

    <ID>ID_Default_KMJ_Cfg</ID>5
(the 5).

Possibly as a result, the driver is not using your file:

Code: Select all

	ID=ID_Default_KMJ_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppDefCfg_KMJ.xml	FileExists=true	InheritsFromID=ID_Default_Cfg
If it doesn't like your file, it will probably log an error and move it to the bak dir.

Other than that, it looks correct.
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

Framed_Previz90 wrote: Fri May 03, 2024 11:44 am Thanks for the guide, I have tried my best to follow it, I think I may have a thing or two wrong as I could not get it to work.

I created a AppDefCfg_KMJ.xml file following your sample xml and placed it at /appdata/. I then stopped the 3dx service with:

Code: Select all

3DxService.exe -quiet -shutdown
Upon restarting the service by opening the 3Dx GUI window, enabling logging via the task tray, two additional files get created in \appdata\:

Code: Select all

...\AppData\Roaming\3Dconnexion\3DxWare\Cfg\AppDefCfg_KMJ.xml
...\AppData\Roaming\3Dconnexion\3DxWare\Cfg\Global.xml
...\AppData\Roaming\3Dconnexion\3DxWare\Cfg\UserInfo.xml
Using baretail to read the log fie, I got some lines similar to what you shared:

Code: Select all

...
00000400 3/5/2024 18:9:49.015: CreateCfgChain: CfgChain is
	ID=ID_Global_Cfg	FileName=C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\Global.xml	FileExists=true	InheritsFromID=ID_Global_Cfg
	ID=ID_Global_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Global.xml	FileExists=true	InheritsFromID=
	ID=ID_EnUS_LocalizationTables	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\en-US.xml	FileExists=true	InheritsFromID=
	ID=ID_WindowsTerminal	FileName=C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\WindowsTerminal-KMJ.xml	FileExists=false	InheritsFromID=ID_Default_KMJ_Cfg
	ID=ID_Default_KMJ_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppDefCfg_KMJ.xml	FileExists=true	InheritsFromID=ID_Default_Cfg
	ID=ID_Default_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\AppCfg.xml	FileExists=true	InheritsFromID=ID_Base_Cfg
	ID=ID_Base_Cfg	FileName=C:\Program Files\3Dconnexion\3DxWare\3DxWinCore\Cfg\Base.xml	FileExists=true	InheritsFromID=

00000040 3/5/2024 18:9:49.023: RefreshAffectedCfgs: Rereading C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml
00000400 3/5/2024 18:9:49.023: Cfg::Cfg(pCfgInfo:ExecutableName: PureRef.exe, appSig:PureRef.exe/PID=11680/Focus=0x291446/Cursor=0x291446) Filename:C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml
00000400 3/5/2024 18:9:49.023: Cfg::Init: m_pCfgInfo:ExecutableName: PureRef.exe, m_AppSignature:PureRef.exe/PID=11680/Focus=0x291446/Cursor=0x291446) Filename:C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml
00000040 3/5/2024 18:9:49.024: TlXmlDoc::TlXmlDoc(): Error: Giving up trying to open file C:\Users\user1\AppData\Roaming\3Dconnexion\3DxWare\Cfg\PureRef.xml.  errMsg: The system cannot locate the object specified.
...
And then as I move the device X axis the window under the mouse pointer get scrolled and these lines get printed:

Code: Select all

...
00000020 3/5/2024 19:9:24.282: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.075000, pressLevel=0.572825
00000020 3/5/2024 19:9:24.297: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-78
00000020 3/5/2024 19:9:24.297: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.078000, pressLevel=0.575758
00000020 3/5/2024 19:9:24.313: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-78
00000020 3/5/2024 19:9:24.313: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.078000, pressLevel=0.575758
00000020 3/5/2024 19:9:24.329: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-80
00000020 3/5/2024 19:9:24.329: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.080000, pressLevel=0.577713
00000020 3/5/2024 19:9:24.345: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-78
00000020 3/5/2024 19:9:24.345: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.078000, pressLevel=0.575758
00000080 3/5/2024 19:9:24.345: SendMouseAxisOrWheelEvent: MouseX=0, MouseY=0, VScroll=-1, HScroll=0, Buttons Mask Change=0x0, Buttons Status=0x0 
00000020 3/5/2024 19:9:24.362: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-74
00000020 3/5/2024 19:9:24.362: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.074000, pressLevel=0.571848
00000020 3/5/2024 19:9:24.378: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-62
00000020 3/5/2024 19:9:24.378: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.062000, pressLevel=0.560117
00000020 3/5/2024 19:9:24.393: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-53
00000020 3/5/2024 19:9:24.394: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.053000, pressLevel=0.551320
00000020 3/5/2024 19:9:24.409: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-42
00000020 3/5/2024 19:9:24.409: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.042000, pressLevel=0.540567
00000020 3/5/2024 19:9:24.425: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-26
00000020 3/5/2024 19:9:24.426: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.026000, pressLevel=0.524927
00000020 3/5/2024 19:9:24.441: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-15
00000020 3/5/2024 19:9:24.442: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.015000, pressLevel=0.514174
00000020 3/5/2024 19:9:24.457: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-16
00000020 3/5/2024 19:9:24.457: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.016000, pressLevel=0.515152
00000020 3/5/2024 19:9:24.473: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=-18
00000020 3/5/2024 19:9:24.474: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=-0.018000, pressLevel=0.517107
00000004 3/5/2024 19:9:24.489: Device: \\?\HID#VID_256F&PID_C62F#9&83445F7&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030}: EPS mean=62.504801, standardDeviation=0.078185
00000020 3/5/2024 19:9:24.490: KMJTrans:UdTransSendEvent: KMJEvent.type=CFG_KMJ_MOUSE_AXIS_WHEEL, origActionID=HIDMultiAxis_Rx, origValue=0
00000020 3/5/2024 19:9:24.490: KMJTrans:UdTransSendEvent: HIDMouse_Wheel event, modifiers=0x0, delta=0.000000, pressLevel=0.499511
00000004 3/5/2024 19:9:26.777: HIDDev.ProcessInputReport: Battery Level Packet: 14 0 from \\?\HID#VID_256F&PID_C62F#9&83445F7&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030}
00000004 3/5/2024 19:9:26.777: UdCtlDevice_SetBatteryState_AllMatching: Setting (actual) device \\?\HID#VID_256F&PID_C62F#9&83445F7&0&0000#{4D1E55B2-F16F-11CF-88CB-001111000030} life to 14, charging to 0
00001000 3/5/2024 19:9:26.777: UdProcessCommEvent: DEVICE_BATTERY_EVENT: Optimization: value didn't change.  Not writing files.
...
I am not sure if the above messages correspond to the action in the Output node:

Code: Select all

 <Output>
	<ActionID>HIDMouse_X</ActionID>
 </Output>
I am not sure what HIDMouse_X is supposed to do, I tried replacing it, with something I understand:

Code: Select all

 <Output>
	<ActionID>KB_Keystroke</ActionID>
	<Scale>3.00</Scale>
	<RepeatStyle>Auto</RepeatStyle>
	<KeyStroke><Key>1E</Key></KeyStroke>
 </Output>
But this does not seem to get picked up, even after I stopped, then started the service, X axis is still performing wheel scrolling instead of typing 1.
There is still a AppDefCfg_KMJ.xml over at C:\Program Files I made a backup of it and deleted it but upon restarting the service, it complains with message box, so I restored it:

Code: Select all

Exception: Object reference not set to an instance of an object.
For completeness sake, the full content of the AppDefCfg_KMJ.xml file I placed in /appdata/ is:

Code: Select all

<AppDefCfg  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Default="false" CfgFormatVersion="1.3" ThisFileVersion="2.0">
  <CfgProperties>
    <ID>ID_Default_KMJ_Cfg</ID>
    <Name>STR_DEFAULT_KMJ</Name>
    <InheritsFromID>ID_Default_KMJ_Cfg</InheritsFromID>
  </CfgProperties>
  <AppInfo>
    <Signature>
      <Transport>KMJ</Transport>
    </Signature>
    <Options>
      <SendDeviceChangeEvent>false</SendDeviceChangeEvent>
    </Options>
  </AppInfo>
    <Devices>
    <Device>
      <ID>ID_Standard_3D_Mouse</ID>
      <Name>Standard 3D Mouse</Name>
      <CurrentAxisBank>Default</CurrentAxisBank>
      <AxisBank Default="true">
        <ID>Default</ID>
        <Name>STR_DEFAULT_BANK</Name>
        <Axis>
          <Enabled>true</Enabled>
          <Input>
            <ActionID>HIDMultiAxis_X</ActionID>
            <Min>-512</Min>
            <Max>511</Max>
          </Input>
          <Output>
            <ActionID>HIDMouse_X</ActionID>
          </Output>
        </Axis>
      </AxisBank>
    </Device>
  </Devices>
    <AuthorInfo>
    <DriverVersion>17.8.20.20889</DriverVersion>
    <LastChange>
      <Tool>3DxSmartUI.exe</Tool>
      <Version>1.2.24106.20869</Version>
      <Date>5/3/2024 3:59:30 PM UTC</Date>
      <User>user1</User>
    </LastChange>
  </AuthorInfo>
</AppDefCfg>

jwick wrote: Fri May 03, 2024 5:07 am These are the sort of problems you might encounter when we ship a default cfg file (FireFox, Explorer, etc).
Searches are done one axis, and one button, at a time. There's a lot of flexibility there, if you can keep track of what is happening.
Baretail is your friend.
Sounds really intresting for sure, and I will be sure to take a close look when I get my bearings together, thanks!
EDIT: Removed the "5" typo error.
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

jwick wrote: Fri May 03, 2024 11:54 am You have a typo, at least, in that AppDefCfg_KMJ.xml listing:

Code: Select all

    <ID>ID_Default_KMJ_Cfg</ID>5
(the 5).
Hmm... The typo you point to occurred while I was drafting that post on the forum, its certainly not in the source file I have here. I just double checked and rerun the test, same result.

I was initially dealing with invalid xml tags, which would cause the AppDefCfg_KMJ to be automatically moved to /cfg/bak/ directory but I fixed those tags and then the file was no longer being moved to that directory.

It must be down to something else. Could you by any chance check if the xml I provided works as expected on your environment? (I edited my post and removed the "5" typo error).

PS, I am on window 11 and on driver:

Code: Select all

3dxWare 10.8.20.3729
3dxWinCore 17.8.20.20889
mr.juro
Posts: 1
Joined: Fri May 03, 2024 2:03 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by mr.juro »

Hi All,

I find hard to believe 3d connexion software doesn't allow user friendly way to set this up.
Not sure why they 'force people to use their default settings'.

I'm also looking for a way to set my current setting for specific application(IronCAD) as "default" and "Global", meaning my axes, rotation and such (not buttons) will be used even in 3dconnexion trainings (app that pops up after system start).
jwick
Moderator
Moderator
Posts: 3350
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by jwick »

Hi Framed_Previz90,

I was wrong. That doesn't work in the released driver. It works in the development version because of some other things we are doing.

Until that gets released, copy the entire default AppDefCfg_KMJ.xml from Program Files to %programdata%\3Dconnexion\3DxWare\Cfg. You can make your changes there.

Sorry for the confusion.
Jim
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

I see, no worries, I will make a copy of AppDefCfg_KMJ.xml to /AppData/ and mess with it to see what I end up with.
jwick wrote: Mon May 06, 2024 6:20 am Until that gets released, copy the entire default AppDefCfg_KMJ.xml from Program Files to %programdata%\3Dconnexion\3DxWare\Cfg. You can make your changes there.

Sorry for the confusion.
Jim
Don't be on my account, I am thankful for the help I got here and I am sure others who may encounter this thread will be, I really want to learn a lot about configuring the space mouse as I have a lot of personal DIY hobbyist plans for it, so this was good.

Looking forward to any driver/software updates

Cheers.
jwick
Moderator
Moderator
Posts: 3350
Joined: Wed Dec 20, 2006 2:25 pm
Location: USA
Contact:

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by jwick »

You might need to put it into %ProgramData%, not %AppData% for the driver to use it.
%programData% on my machine is: C:\ProgramData\3Dconnexion\3DxWare\Cfg
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

jwick wrote: Mon May 06, 2024 12:59 pm You might need to put it into %ProgramData%, not %AppData% for the driver to use it.
%programData% on my machine is: C:\ProgramData\3Dconnexion\3DxWare\Cfg
Okay, I will keep that in mind.
Phil999
Posts: 426
Joined: Tue Jun 30, 2009 5:20 am

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Phil999 »

great info gentlemen. This is something I wanted to tackle long time ago. Thank you a lot.
Space Navigator x2, Space Pilot, Space Pilot Pro, SpaceMouse Enterprise
Framed_Previz90
Posts: 33
Joined: Sat May 23, 2020 8:31 pm

Re: A default cfg/profile that applies to all applications, except for applications that have a user cfg file

Post by Framed_Previz90 »

jwick wrote: Mon May 06, 2024 12:59 pm You might need to put it into %ProgramData%, not %AppData% for the driver to use it.
%programData% on my machine is: C:\ProgramData\3Dconnexion\3DxWare\Cfg
I can confirm that this method is working for me.
Phil999 wrote: Tue May 07, 2024 9:06 pm great info gentlemen. This is something I wanted to tackle long time ago. Thank you a lot.
I am glad to hear :)
Post Reply