4 * Copyright 2002-2003 AVM Computersysteme Vertriebs GmbH
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
22 #define __NO_CAPIUTILS__
25 #include "wine/port.h"
28 #include <sys/types.h>
34 #ifdef HAVE_LINUX_CAPI_H
35 # include <linux/capi.h>
40 #include "wine/debug.h"
43 WINE_DEFAULT_DEBUG_CHANNEL(capi
);
45 #ifdef SONAME_LIBCAPI20
47 static unsigned (*pcapi20_register
)(unsigned, unsigned, unsigned, unsigned *) = NULL
;
48 static unsigned (*pcapi20_release
)(unsigned) = NULL
;
49 static unsigned (*pcapi20_put_message
)(unsigned, unsigned char *) = NULL
;
50 static unsigned (*pcapi20_get_message
)(unsigned, unsigned char **) = NULL
;
51 static unsigned (*pcapi20_waitformessage
)(unsigned, struct timeval
*) = NULL
;
52 static unsigned (*pcapi20_isinstalled
)(void) = NULL
;
53 static unsigned (*pcapi20_get_profile
)(unsigned, unsigned char *) = NULL
;
54 static unsigned char *(*pcapi20_get_manufacturer
)(unsigned, unsigned char *) = NULL
;
55 static unsigned char *(*pcapi20_get_serial_number
)(unsigned, unsigned char *) = NULL
;
56 static unsigned char *(*pcapi20_get_version
)(unsigned, unsigned char *) = NULL
;
58 static void load_functions(void) {
59 void *capi_handle
= NULL
;
61 if (pcapi20_register
) /* loaded already */
63 capi_handle
= dlopen(SONAME_LIBCAPI20
, RTLD_NOW
);
65 FIXME("Wine cannot find the library %s, capi2032.dll not working.\n", SONAME_LIBCAPI20
);
68 #define LOAD_FUNCPTR(f) if((p##f = dlsym(capi_handle, #f)) == NULL){WARN("Can't find symbol %s\n", #f); return;}
69 LOAD_FUNCPTR(capi20_register
);
70 LOAD_FUNCPTR(capi20_release
);
71 LOAD_FUNCPTR(capi20_put_message
);
72 LOAD_FUNCPTR(capi20_get_message
);
73 LOAD_FUNCPTR(capi20_waitformessage
);
74 LOAD_FUNCPTR(capi20_isinstalled
);
75 LOAD_FUNCPTR(capi20_get_profile
);
76 LOAD_FUNCPTR(capi20_get_manufacturer
);
77 LOAD_FUNCPTR(capi20_get_serial_number
);
78 LOAD_FUNCPTR(capi20_get_version
);
84 /*===========================================================================*\
85 \*===========================================================================*/
87 DWORD WINAPI
wrapCAPI_REGISTER (DWORD MessageBufferSize
, DWORD maxLogicalConnection
, DWORD maxBDataBlocks
, DWORD maxBDataLen
, DWORD
*pApplID
) {
88 #ifdef SONAME_LIBCAPI20
93 if (!pcapi20_register
)
95 fret
= pcapi20_register (maxLogicalConnection
, maxBDataBlocks
, maxBDataLen
, &aid
);
97 TRACE ( "(%x) -> %x\n", *pApplID
, fret
);
100 FIXME ( "(), no CAPI4LINUX support compiled into WINE.\n" );
105 /*---------------------------------------------------------------------------*\
106 \*---------------------------------------------------------------------------*/
107 DWORD WINAPI
wrapCAPI_RELEASE (DWORD ApplID
) {
108 #ifdef SONAME_LIBCAPI20
112 if (!pcapi20_release
)
114 fret
= pcapi20_release (ApplID
);
115 TRACE ("(%x) -> %x\n", ApplID
, fret
);
122 /*---------------------------------------------------------------------------*\
123 \*---------------------------------------------------------------------------*/
124 DWORD WINAPI
wrapCAPI_PUT_MESSAGE (DWORD ApplID
, PVOID pCAPIMessage
) {
125 #ifdef SONAME_LIBCAPI20
129 if (!pcapi20_put_message
)
131 fret
= pcapi20_put_message (ApplID
, pCAPIMessage
);
132 TRACE ("(%x) -> %x\n", ApplID
, fret
);
139 /*---------------------------------------------------------------------------*\
140 \*---------------------------------------------------------------------------*/
141 DWORD WINAPI
wrapCAPI_GET_MESSAGE (DWORD ApplID
, PVOID
*ppCAPIMessage
) {
142 #ifdef SONAME_LIBCAPI20
146 if (!pcapi20_get_message
)
148 fret
= pcapi20_get_message (ApplID
, (unsigned char **)ppCAPIMessage
);
149 TRACE ("(%x) -> %x\n", ApplID
, fret
);
156 /*---------------------------------------------------------------------------*\
157 \*---------------------------------------------------------------------------*/
158 DWORD WINAPI
wrapCAPI_WAIT_FOR_SIGNAL (DWORD ApplID
) {
159 #ifdef SONAME_LIBCAPI20
160 TRACE ("(%x)\n", ApplID
);
163 if (!pcapi20_waitformessage
)
166 return pcapi20_waitformessage (ApplID
, NULL
);
172 /*---------------------------------------------------------------------------*\
173 \*---------------------------------------------------------------------------*/
174 DWORD WINAPI
wrapCAPI_GET_MANUFACTURER (char *SzBuffer
) {
175 #ifdef SONAME_LIBCAPI20
179 if (!pcapi20_get_manufacturer
)
182 fret
= (pcapi20_get_manufacturer (0, (unsigned char *) SzBuffer
) != 0) ? 0 : 0x1108;
183 if (!strncmp (SzBuffer
, "AVM", 3)) {
184 strcpy (SzBuffer
, "AVM-GmbH");
186 TRACE ("(%s) -> %x\n", SzBuffer
, fret
);
193 /*---------------------------------------------------------------------------*\
194 \*---------------------------------------------------------------------------*/
195 DWORD WINAPI
wrapCAPI_GET_VERSION (DWORD
*pCAPIMajor
, DWORD
*pCAPIMinor
, DWORD
*pManufacturerMajor
, DWORD
*pManufacturerMinor
) {
196 #ifdef SONAME_LIBCAPI20
197 unsigned char version
[4 * sizeof (unsigned)];
201 if (!pcapi20_get_version
)
203 fret
= (pcapi20_get_version (0, version
) != 0) ? 0 : 0x1108;
204 *pCAPIMajor
= *(unsigned *)(version
+ 0 * sizeof (unsigned));
205 *pCAPIMinor
= *(unsigned *)(version
+ 1 * sizeof (unsigned));
206 *pManufacturerMajor
= *(unsigned *)(version
+ 2 * sizeof (unsigned));
207 *pManufacturerMinor
= *(unsigned *)(version
+ 3 * sizeof (unsigned));
208 TRACE ("(%x.%x,%x.%x) -> %x\n", *pCAPIMajor
, *pCAPIMinor
, *pManufacturerMajor
,
209 *pManufacturerMinor
, fret
);
216 /*---------------------------------------------------------------------------*\
217 \*---------------------------------------------------------------------------*/
218 DWORD WINAPI
wrapCAPI_GET_SERIAL_NUMBER (char *SzBuffer
) {
219 #ifdef SONAME_LIBCAPI20
223 if (!pcapi20_get_serial_number
)
225 fret
= (pcapi20_get_serial_number (0, (unsigned char*) SzBuffer
) != 0) ? 0 : 0x1108;
226 TRACE ("(%s) -> %x\n", SzBuffer
, fret
);
233 /*---------------------------------------------------------------------------*\
234 \*---------------------------------------------------------------------------*/
235 DWORD WINAPI
wrapCAPI_GET_PROFILE (PVOID SzBuffer
, DWORD CtlrNr
) {
236 #ifdef SONAME_LIBCAPI20
240 if (!pcapi20_get_profile
)
243 fret
= pcapi20_get_profile (CtlrNr
, SzBuffer
);
244 TRACE ("(%x,%x) -> %x\n", CtlrNr
, *(unsigned short *)SzBuffer
, fret
);
251 /*---------------------------------------------------------------------------*\
252 \*---------------------------------------------------------------------------*/
253 DWORD WINAPI
wrapCAPI_INSTALLED (void) {
254 #ifdef SONAME_LIBCAPI20
258 if (!pcapi20_isinstalled
)
260 fret
= pcapi20_isinstalled();
261 TRACE ("() -> %x\n", fret
);
268 /*---------------------------------------------------------------------------*\
269 \*---------------------------------------------------------------------------*/
270 DWORD WINAPI
wrapCAPI_MANUFACTURER (DWORD Class
, DWORD Function
, DWORD Ctlr
, PVOID pParams
, DWORD ParamsLen
) {
271 FIXME ("(), not supported!\n");
275 /*---------------------------------------------------------------------------*\
276 \*---------------------------------------------------------------------------*/