From f8cd01069c856664f9acd970237d24fff9b6e2f3 Mon Sep 17 00:00:00 2001 From: Eugene Wang <8755753+soukoku@users.noreply.github.com> Date: Sun, 2 Apr 2023 08:10:18 -0400 Subject: [PATCH] Added xfergroup. --- src/NTwain/DSM/OSXLegacyDSM.cs | 7 ++ src/NTwain/DSM/OSXNewDSM.cs | 7 ++ src/NTwain/DSM/WinLegacyDSM.cs | 7 ++ src/NTwain/DSM/WinNewDSM.cs | 7 ++ src/NTwain/Triplets/ControlDATs/Callback.cs | 8 +-- src/NTwain/Triplets/ControlDATs/Callback2.cs | 8 +-- src/NTwain/Triplets/ControlDATs/XferGroup.cs | 68 ++++++++++++++++++++ src/NTwain/Triplets/DGControl.cs | 3 + 8 files changed, 107 insertions(+), 8 deletions(-) create mode 100644 src/NTwain/Triplets/ControlDATs/XferGroup.cs diff --git a/src/NTwain/DSM/OSXLegacyDSM.cs b/src/NTwain/DSM/OSXLegacyDSM.cs index 3e7b2bf..4fe3f5d 100644 --- a/src/NTwain/DSM/OSXLegacyDSM.cs +++ b/src/NTwain/DSM/OSXLegacyDSM.cs @@ -74,5 +74,12 @@ namespace NTwain.DSM ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + internal static extern ushort DSM_Entry + ( + ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); } } diff --git a/src/NTwain/DSM/OSXNewDSM.cs b/src/NTwain/DSM/OSXNewDSM.cs index 20f6318..b2d73e2 100644 --- a/src/NTwain/DSM/OSXNewDSM.cs +++ b/src/NTwain/DSM/OSXNewDSM.cs @@ -74,5 +74,12 @@ namespace NTwain.DSM ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + internal static extern ushort DSM_Entry + ( + ref TW_IDENTITY_MACOSX origin, ref TW_IDENTITY_MACOSX dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); } } diff --git a/src/NTwain/DSM/WinLegacyDSM.cs b/src/NTwain/DSM/WinLegacyDSM.cs index cccc2de..a5fec95 100644 --- a/src/NTwain/DSM/WinLegacyDSM.cs +++ b/src/NTwain/DSM/WinLegacyDSM.cs @@ -74,5 +74,12 @@ namespace NTwain.DSM ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + internal static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); } } diff --git a/src/NTwain/DSM/WinNewDSM.cs b/src/NTwain/DSM/WinNewDSM.cs index 930b54b..ea71ff6 100644 --- a/src/NTwain/DSM/WinNewDSM.cs +++ b/src/NTwain/DSM/WinNewDSM.cs @@ -74,5 +74,12 @@ namespace NTwain.DSM ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, DG dg, DAT dat, MSG msg, ref TW_CALLBACK2 twcallback ); + + [DllImport(DsmName, CharSet = CharSet.Ansi)] + internal static extern ushort DSM_Entry + ( + ref TW_IDENTITY_LEGACY origin, ref TW_IDENTITY_LEGACY dest, + DG dg, DAT dat, MSG msg, ref DG xfergroup + ); } } diff --git a/src/NTwain/Triplets/ControlDATs/Callback.cs b/src/NTwain/Triplets/ControlDATs/Callback.cs index c9be18c..44fcea4 100644 --- a/src/NTwain/Triplets/ControlDATs/Callback.cs +++ b/src/NTwain/Triplets/ControlDATs/Callback.cs @@ -31,11 +31,11 @@ namespace NTwain.Triplets.ControlDATs var ds = Session.CurrentSource; if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM) { - rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK, msg, ref data); } else { - rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK, msg, ref data); } } else if (TwainPlatform.IsMacOSX) @@ -44,11 +44,11 @@ namespace NTwain.Triplets.ControlDATs TW_IDENTITY_MACOSX ds = Session.CurrentSource; if (TwainPlatform.PreferLegacyDSM) { - rc = (STS)OSXLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)OSXLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK, msg, ref data); } else { - rc = (STS)OSXNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)OSXNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK, msg, ref data); } } return rc; diff --git a/src/NTwain/Triplets/ControlDATs/Callback2.cs b/src/NTwain/Triplets/ControlDATs/Callback2.cs index 88c1410..bfb5017 100644 --- a/src/NTwain/Triplets/ControlDATs/Callback2.cs +++ b/src/NTwain/Triplets/ControlDATs/Callback2.cs @@ -31,11 +31,11 @@ namespace NTwain.Triplets.ControlDATs var ds = Session.CurrentSource; if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM) { - rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK2, msg, ref data); } else { - rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK2, msg, ref data); } } else if (TwainPlatform.IsMacOSX) @@ -44,11 +44,11 @@ namespace NTwain.Triplets.ControlDATs TW_IDENTITY_MACOSX ds = Session.CurrentSource; if (TwainPlatform.PreferLegacyDSM) { - rc = (STS)OSXLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)OSXLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK2, msg, ref data); } else { - rc = (STS)OSXNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.DEVICEEVENT, msg, ref data); + rc = (STS)OSXNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.CALLBACK2, msg, ref data); } } return rc; diff --git a/src/NTwain/Triplets/ControlDATs/XferGroup.cs b/src/NTwain/Triplets/ControlDATs/XferGroup.cs new file mode 100644 index 0000000..e44a092 --- /dev/null +++ b/src/NTwain/Triplets/ControlDATs/XferGroup.cs @@ -0,0 +1,68 @@ +using NTwain.DSM; +using TWAINWorkingGroup; + +namespace NTwain.Triplets.ControlDATs +{ + /// + /// Contains calls used with and . + /// + public class XferGroup : TripletBase + { + public XferGroup(TwainSession session) : base(session) + { + } + + /// + /// Gets the transfer group used. + /// + /// + /// + public STS Get(out DG data) + { + data = default; + return DoIt(MSG.GET, ref data); + } + + /// + /// Sets the transfer group to be used. + /// + /// + /// + public STS Set(DG data) + { + return DoIt(MSG.SET, ref data); + } + + STS DoIt(MSG msg, ref DG data) + { + var rc = STS.FAILURE; + if (TwainPlatform.IsWindows) + { + var app = Session.AppIdentity; + var ds = Session.CurrentSource; + if (TwainPlatform.Is32bit && TwainPlatform.PreferLegacyDSM) + { + rc = (STS)WinLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.XFERGROUP, msg, ref data); + } + else + { + rc = (STS)WinNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.XFERGROUP, msg, ref data); + } + } + else if (TwainPlatform.IsMacOSX) + { + TW_IDENTITY_MACOSX app = Session.AppIdentity; + TW_IDENTITY_MACOSX ds = Session.CurrentSource; + if (TwainPlatform.PreferLegacyDSM) + { + rc = (STS)OSXLegacyDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.XFERGROUP, msg, ref data); + } + else + { + rc = (STS)OSXNewDSM.DSM_Entry(ref app, ref ds, DG.CONTROL, DAT.XFERGROUP, msg, ref data); + } + } + return rc; + } + } +} diff --git a/src/NTwain/Triplets/DGControl.cs b/src/NTwain/Triplets/DGControl.cs index fc9e994..28dae5e 100644 --- a/src/NTwain/Triplets/DGControl.cs +++ b/src/NTwain/Triplets/DGControl.cs @@ -38,5 +38,8 @@ namespace NTwain.Triplets private Callback2? _callback2; public Callback2 Callback2 => _callback2 ??= new Callback2(Session); + private XferGroup? _xferGroup; + public XferGroup XferGroup => _xferGroup ??= new XferGroup(Session); + } } \ No newline at end of file