Hi, although I'm pretty new to all this I've managed to control the CDU through the PMDG offsets using both the FSUIPC Buttons & Switches page & through a Lua script.
The info is out there but in a few different places so I though I'd post this for reference:
Open up PMDG\PMDG 737 NGX\SDK\PMDG_NGX_SDK.h
Find the address to write to by adding your event to THIRD_PARTY_EVENT_ID_MIN
#define THIRD_PARTY_EVENT_ID_MIN 0x00011000 // equals to 69632
#define EVT_CDU_L_A (THIRD_PARTY_EVENT_ID_MIN + 573)
So to write the letter 'A' to the CDU the address is 70205. In Addons/FSUIPC/Buttons+Switches under 'Control sent when button pressed' select <custom Control> & enter 70205.
So far so obvious. What was not immediately obvious was the parameter. You might expect to just send a '1'. However, although this appears to work the first time, if you try to send another 'A' char it doesn't. You need to send the left mouse single click value as defined here in the header:
#define MOUSE_FLAG_LEFTSINGLE 0x20000000 // 536870912 in decimal
I then went on to do this through a Lua script that was called from the external hidmacros program:
CDU.lua (Saved in FSUIPC folder: P3Dv3\Modules) :
--[[
LUA Script that gets called by a hidmacros script with the key value pressed on the CDU.
In hidmacros use the following script:
HIDMacros.setFSUIPCInt &H0D6C,4,70205
HIDMacros.setFSUIPCString &H0D70,40,"Lua CDU"
Note:
The 1st line writes 70205, 'A' key to the FSUIPC ipcPARAM variable.
Replace 'CDU' with the name of your Lua script (without the .lua extension)
--]]
LEFT_MOUSE_SINGLE = 0x20000000
key = ipcPARAM
ipc.log("CDU: Sending " .. key)
ipc.control(key, LEFT_MOUSE_SINGLE)
--------------------------------------
P3D v3.4.18.19475
SimConnect v3.4.0.0
FSUIPC v4.959
hidmacros v2.3.0.710