2 * Copyright 2000 Corel Corporation
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #include "wine/debug.h"
23 WINE_DEFAULT_DEBUG_CHANNEL(twain
);
25 /* DG_CONTROL/DAT_CAPABILITY/MSG_GET */
26 TW_UINT16
SANE_CapabilityGet (pTW_IDENTITY pOrigin
, TW_MEMREF pData
)
28 TW_UINT16 twRC
= TWRC_SUCCESS
, twCC
= TWCC_SUCCESS
;
29 pTW_CAPABILITY pCapability
= (pTW_CAPABILITY
) pData
;
31 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_GET\n");
33 if (activeDS
.currentState
< 4 || activeDS
.currentState
> 7)
36 activeDS
.twCC
= TWCC_SEQERROR
;
40 twCC
= SANE_SaneCapability (pCapability
, MSG_GET
);
41 twRC
= (twCC
== TWCC_SUCCESS
)?TWRC_SUCCESS
:TWRC_FAILURE
;
48 /* DG_CONTROL/DAT_CAPABILITY/MSG_GETCURRENT */
49 TW_UINT16
SANE_CapabilityGetCurrent (pTW_IDENTITY pOrigin
, TW_MEMREF pData
)
51 TW_UINT16 twRC
= TWRC_SUCCESS
, twCC
= TWCC_SUCCESS
;
52 pTW_CAPABILITY pCapability
= (pTW_CAPABILITY
) pData
;
54 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_GETCURRENT\n");
56 if (activeDS
.currentState
< 4 || activeDS
.currentState
> 7)
59 activeDS
.twCC
= TWCC_SEQERROR
;
63 twCC
= SANE_SaneCapability (pCapability
, MSG_GETCURRENT
);
64 twRC
= (twCC
== TWCC_SUCCESS
)?TWRC_SUCCESS
:TWRC_FAILURE
;
71 /* DG_CONTROL/DAT_CAPABILITY/MSG_GETDEFAULT */
72 TW_UINT16
SANE_CapabilityGetDefault (pTW_IDENTITY pOrigin
, TW_MEMREF pData
)
74 TW_UINT16 twRC
= TWRC_SUCCESS
, twCC
= TWCC_SUCCESS
;
75 pTW_CAPABILITY pCapability
= (pTW_CAPABILITY
) pData
;
77 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_GETDEFAULT\n");
79 if (activeDS
.currentState
< 4 || activeDS
.currentState
> 7)
82 activeDS
.twCC
= TWCC_SEQERROR
;
86 twCC
= SANE_SaneCapability (pCapability
, MSG_GETDEFAULT
);
87 twRC
= (twCC
== TWCC_SUCCESS
)?TWRC_SUCCESS
:TWRC_FAILURE
;
94 /* DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT */
95 TW_UINT16
SANE_CapabilityQuerySupport (pTW_IDENTITY pOrigin
,
98 TW_UINT16 twRC
= TWRC_SUCCESS
, twCC
= TWCC_SUCCESS
;
99 pTW_CAPABILITY pCapability
= (pTW_CAPABILITY
) pData
;
101 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_QUERYSUPPORT\n");
103 if (activeDS
.currentState
< 4 || activeDS
.currentState
> 7)
106 activeDS
.twCC
= TWCC_SEQERROR
;
110 twCC
= SANE_SaneCapability (pCapability
, MSG_QUERYSUPPORT
);
111 twRC
= (twCC
== TWCC_SUCCESS
)?TWRC_SUCCESS
:TWRC_FAILURE
;
112 activeDS
.twCC
= twCC
;
118 /* DG_CONTROL/DAT_CAPABILITY/MSG_RESET */
119 TW_UINT16
SANE_CapabilityReset (pTW_IDENTITY pOrigin
,
122 TW_UINT16 twRC
= TWRC_SUCCESS
, twCC
= TWCC_SUCCESS
;
123 pTW_CAPABILITY pCapability
= (pTW_CAPABILITY
) pData
;
125 TRACE("DG_CONTROL/DAT_CAPABILITY/MSG_RESET\n");
127 if (activeDS
.currentState
< 4 || activeDS
.currentState
> 7)
130 activeDS
.twCC
= TWCC_SEQERROR
;
134 twCC
= SANE_SaneCapability (pCapability
, MSG_RESET
);
135 twRC
= (twCC
== TWCC_SUCCESS
)?TWRC_SUCCESS
:TWRC_FAILURE
;
136 activeDS
.twCC
= twCC
;
142 /* DG_CONTROL/DAT_CAPABILITY/MSG_SET */
143 TW_UINT16
SANE_CapabilitySet (pTW_IDENTITY pOrigin
,
146 TW_UINT16 twRC
= TWRC_SUCCESS
, twCC
= TWCC_SUCCESS
;
147 pTW_CAPABILITY pCapability
= (pTW_CAPABILITY
) pData
;
149 TRACE ("DG_CONTROL/DAT_CAPABILITY/MSG_SET\n");
151 if (activeDS
.currentState
!= 4)
154 activeDS
.twCC
= TWCC_SEQERROR
;
158 twCC
= SANE_SaneCapability (pCapability
, MSG_SET
);
159 if (twCC
== TWCC_CHECKSTATUS
)
162 twRC
= TWRC_CHECKSTATUS
;
165 twRC
= (twCC
== TWCC_SUCCESS
)?TWRC_SUCCESS
:TWRC_FAILURE
;
166 activeDS
.twCC
= twCC
;
171 /* DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT */
172 TW_UINT16
SANE_ProcessEvent (pTW_IDENTITY pOrigin
,
175 TW_UINT16 twRC
= TWRC_NOTDSEVENT
;
176 pTW_EVENT pEvent
= (pTW_EVENT
) pData
;
177 MSG
*pMsg
= pEvent
->pEvent
;
179 TRACE("DG_CONTROL/DAT_EVENT/MSG_PROCESSEVENT msg 0x%x, wParam 0x%Ix\n", pMsg
->message
, pMsg
->wParam
);
181 activeDS
.twCC
= TWCC_SUCCESS
;
182 pEvent
->TWMessage
= MSG_NULL
; /* no message to the application */
184 if (activeDS
.currentState
< 5 || activeDS
.currentState
> 7)
187 activeDS
.twCC
= TWCC_SEQERROR
;
193 /* DG_CONTROL/DAT_PENDINGXFERS/MSG_ENDXFER */
194 TW_UINT16
SANE_PendingXfersEndXfer (pTW_IDENTITY pOrigin
,
197 TW_UINT16 twRC
= TWRC_SUCCESS
;
198 pTW_PENDINGXFERS pPendingXfers
= (pTW_PENDINGXFERS
) pData
;
200 TRACE("DG_CONTROL/DAT_PENDINGXFERS/MSG_ENDXFER\n");
202 if (activeDS
.currentState
!= 6 && activeDS
.currentState
!= 7)
205 activeDS
.twCC
= TWCC_SEQERROR
;
209 pPendingXfers
->Count
= -1;
210 activeDS
.currentState
= 6;
211 if (SANE_CALL( start_device
, NULL
))
213 pPendingXfers
->Count
= 0;
214 activeDS
.currentState
= 5;
215 /* Notify the application that it can close the data source */
216 SANE_Notify(MSG_CLOSEDSREQ
);
219 activeDS
.twCC
= TWCC_SUCCESS
;
225 /* DG_CONTROL/DAT_PENDINGXFERS/MSG_GET */
226 TW_UINT16
SANE_PendingXfersGet (pTW_IDENTITY pOrigin
,
229 TW_UINT16 twRC
= TWRC_SUCCESS
;
230 pTW_PENDINGXFERS pPendingXfers
= (pTW_PENDINGXFERS
) pData
;
232 TRACE("DG_CONTROL/DAT_PENDINGXFERS/MSG_GET\n");
234 if (activeDS
.currentState
< 4 || activeDS
.currentState
> 7)
237 activeDS
.twCC
= TWCC_SEQERROR
;
241 pPendingXfers
->Count
= -1;
242 if (SANE_CALL( start_device
, NULL
))
243 pPendingXfers
->Count
= 0;
245 activeDS
.twCC
= TWCC_SUCCESS
;
251 /* DG_CONTROL/DAT_PENDINGXFERS/MSG_RESET */
252 TW_UINT16
SANE_PendingXfersReset (pTW_IDENTITY pOrigin
,
255 TW_UINT16 twRC
= TWRC_SUCCESS
;
256 pTW_PENDINGXFERS pPendingXfers
= (pTW_PENDINGXFERS
) pData
;
258 TRACE("DG_CONTROL/DAT_PENDINGXFERS/MSG_RESET\n");
260 if (activeDS
.currentState
!= 6)
263 activeDS
.twCC
= TWCC_SEQERROR
;
267 pPendingXfers
->Count
= 0;
268 activeDS
.currentState
= 5;
270 activeDS
.twCC
= TWCC_SUCCESS
;
271 SANE_CALL( cancel_device
, NULL
);
277 /* DG_CONTROL/DAT_SETUPMEMXFER/MSG_GET */
278 TW_UINT16
SANE_SetupMemXferGet (pTW_IDENTITY pOrigin
,
281 pTW_SETUPMEMXFER pSetupMemXfer
= (pTW_SETUPMEMXFER
)pData
;
283 TRACE("DG_CONTROL/DAT_SETUPMEMXFER/MSG_GET\n");
284 if (activeDS
.frame_params
.bytes_per_line
)
286 pSetupMemXfer
->MinBufSize
= activeDS
.frame_params
.bytes_per_line
;
287 pSetupMemXfer
->MaxBufSize
= activeDS
.frame_params
.bytes_per_line
* 8;
288 pSetupMemXfer
->Preferred
= activeDS
.frame_params
.bytes_per_line
* 2;
293 pSetupMemXfer
->MinBufSize
= 2000;
294 pSetupMemXfer
->MaxBufSize
= 8000;
295 pSetupMemXfer
->Preferred
= 4000;
301 /* DG_CONTROL/DAT_STATUS/MSG_GET */
302 TW_UINT16
SANE_GetDSStatus (pTW_IDENTITY pOrigin
,
305 pTW_STATUS pSourceStatus
= (pTW_STATUS
) pData
;
307 TRACE ("DG_CONTROL/DAT_STATUS/MSG_GET\n");
308 pSourceStatus
->ConditionCode
= activeDS
.twCC
;
309 /* Reset the condition code */
310 activeDS
.twCC
= TWCC_SUCCESS
;
314 /* DG_CONTROL/DAT_USERINTERFACE/MSG_DISABLEDS */
315 TW_UINT16
SANE_DisableDSUserInterface (pTW_IDENTITY pOrigin
,
318 TW_UINT16 twRC
= TWRC_SUCCESS
;
320 TRACE ("DG_CONTROL/DAT_USERINTERFACE/MSG_DISABLEDS\n");
322 if (activeDS
.currentState
!= 5)
325 activeDS
.twCC
= TWCC_SEQERROR
;
329 activeDS
.currentState
= 4;
331 activeDS
.twCC
= TWCC_SUCCESS
;
337 /* DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDS */
338 TW_UINT16
SANE_EnableDSUserInterface (pTW_IDENTITY pOrigin
,
341 TW_UINT16 twRC
= TWRC_SUCCESS
;
342 pTW_USERINTERFACE pUserInterface
= (pTW_USERINTERFACE
) pData
;
344 TRACE ("DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDS\n");
346 if (activeDS
.currentState
!= 4)
349 activeDS
.twCC
= TWCC_SEQERROR
;
350 WARN("sequence error %d\n", activeDS
.currentState
);
354 activeDS
.hwndOwner
= pUserInterface
->hParent
;
355 if (pUserInterface
->ShowUI
)
358 activeDS
.currentState
= 5; /* Transitions to state 5 */
360 pUserInterface
->ModalUI
= TRUE
;
363 SANE_Notify(MSG_CLOSEDSREQ
);
367 get_sane_params( &activeDS
.frame_params
);
372 /* no UI will be displayed, so source is ready to transfer data */
373 activeDS
.currentState
= 6; /* Transitions to state 6 directly */
374 SANE_Notify(MSG_XFERREADY
);
378 activeDS
.twCC
= TWCC_SUCCESS
;
384 /* DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDSUIONLY */
385 TW_UINT16
SANE_EnableDSUIOnly (pTW_IDENTITY pOrigin
,
388 TW_UINT16 twRC
= TWRC_SUCCESS
;
390 TRACE("DG_CONTROL/DAT_USERINTERFACE/MSG_ENABLEDSUIONLY\n");
392 if (activeDS
.currentState
!= 4)
395 activeDS
.twCC
= TWCC_SEQERROR
;
399 activeDS
.currentState
= 5;
401 activeDS
.twCC
= TWCC_SUCCESS
;
407 /* DG_CONTROL/DAT_XFERGROUP/MSG_GET */
408 TW_UINT16
SANE_XferGroupGet (pTW_IDENTITY pOrigin
,
416 /* DG_CONTROL/DAT_XFERGROUP/MSG_SET */
417 TW_UINT16
SANE_XferGroupSet (pTW_IDENTITY pOrigin
,