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