| 1 |
|
|---|
| 2 | #define INCL_NOPMAPI
|
|---|
| 3 | #define INCL_DOS
|
|---|
| 4 | #define INCL_ERRORS
|
|---|
| 5 | #define INCL_AUDIO_VSD
|
|---|
| 6 |
|
|---|
| 7 | #include <os2.h>
|
|---|
| 8 | #include <os2me.h>
|
|---|
| 9 | #include <mcd.h>
|
|---|
| 10 | #include <audio.h>
|
|---|
| 11 | #include <stdio.h>
|
|---|
| 12 | #include <string.h>
|
|---|
| 13 | #include <hhpheap.h>
|
|---|
| 14 | #include <stdlib.h>
|
|---|
| 15 | #include <vsdcmds.h>
|
|---|
| 16 | #include <shdd.h>
|
|---|
| 17 |
|
|---|
| 18 | void EXPENTRY LogItToVSDLogFile (char * c);
|
|---|
| 19 | void EXPENTRY LogItToVSDLogFile2 (char * c, ULONG l1, char * c2, ULONG l2);
|
|---|
| 20 | void EXPENTRY LogItToVSDLogFile3 (HVSD hvsd, ULONG ulFunc, PSZ pszFunc, ULONG ulFlags, PSZ pszReq);
|
|---|
| 21 | void EXPENTRY LogItToVSDLogFile4 (PBYTE pRequest);
|
|---|
| 22 |
|
|---|
| 23 | BOOL fInitialized = FALSE;
|
|---|
| 24 | typedef ULONG (APIENTRY FNVSD)(HVSD, ULONG, ULONG, PVOID);
|
|---|
| 25 | typedef FNVSD * PFNVSD;
|
|---|
| 26 | PFNVSD pfnRealVSD = 0;
|
|---|
| 27 |
|
|---|
| 28 | typedef LONG (APIENTRY FNSHD)(PSHD_COMMON);
|
|---|
| 29 | typedef FNSHD * PFNSHD;
|
|---|
| 30 | PFNSHD pfnSHD = 0;
|
|---|
| 31 |
|
|---|
| 32 | HFILE hvsdLogFile = -1;
|
|---|
| 33 |
|
|---|
| 34 | /* Public API's */
|
|---|
| 35 |
|
|---|
| 36 | LONG VSDLOGOpen (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_OPEN_PARMS pRequest);
|
|---|
| 37 | LONG VSDLOGQuery (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest );
|
|---|
| 38 | LONG VSDLOGClose (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest );
|
|---|
| 39 | LONG VSDLOGSave (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest );
|
|---|
| 40 | LONG VSDLOGRestore(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_RESTORE_PARMS pRequest );
|
|---|
| 41 | LONG VSDLOGDevUnits(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_DEVUNITS_PARMS pRequest );
|
|---|
| 42 | LONG VSDLOGResource(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_RESOURCE_PARMS pRequest );
|
|---|
| 43 | LONG VSDLOGSetCommand(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest );
|
|---|
| 44 | LONG VSDLOGGetProdInfo(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_GETPRODINFO_PARMS pRequest );
|
|---|
| 45 | LONG VSDLOGCaps (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_GETDEVCAPS_PARMS pRequest );
|
|---|
| 46 | LONG VSDLOGDDCMD (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest);
|
|---|
| 47 | LONG VSDLOGOther (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest);
|
|---|
| 48 |
|
|---|
| 49 | LONG EXPENTRY VSDLOGSHDEntryPoint (ULONG event, PVOID pMsg);
|
|---|
| 50 | #define VSDLOG_REPORTINT 1
|
|---|
| 51 | #define VSDLOG_REPORTEVENT 2
|
|---|
| 52 | #define VSDLOG_REPORTERROR 3
|
|---|
| 53 |
|
|---|
| 54 | PSZ pszQuery[] = {
|
|---|
| 55 | "",
|
|---|
| 56 | "VSD_QUERYAPERTURESIZE", // 1
|
|---|
| 57 | "VSD_QUERYAUDIOATTRIBUTES", // 2
|
|---|
| 58 | "VSD_QUERYAUDIOCAPABILITIES",// 3
|
|---|
| 59 | "VSD_QUERYBANK",// 4
|
|---|
| 60 | "VSD_QUERYBANKPOINTER",// 5
|
|---|
| 61 | "VSD_QUERYBANKS",// 6
|
|---|
| 62 | "VSD_QUERYCDCAPS",// 7
|
|---|
| 63 | "VSD_QUERYCOMMSETTINGS",// 8
|
|---|
| 64 | "VSD_QUERYCOMPATIBLECONNECTORS",// 9
|
|---|
| 65 | "VSD_QUERYCONNECTOR",// 10
|
|---|
| 66 | "VSD_QUERYCONNECTORTYPES",// 11
|
|---|
| 67 | "VSD_QUERYCOUNTER",// 12
|
|---|
| 68 | "VSD_QUERYCUE",// 13
|
|---|
| 69 | "VSD_QUERYDATATYPE",// 14
|
|---|
| 70 | "VSD_QUERYDIRECTION",// 15
|
|---|
| 71 | "VSD_QUERYDISPLAY",// 16
|
|---|
| 72 | "VSD_QUERYDOOR",// 17
|
|---|
| 73 | "VSD_QUERYEVENTLIST",// 18
|
|---|
| 74 | "VSD_QUERYFREEZE",// 19
|
|---|
| 75 | "VSD_QUERYIMAGEATTRIBUTES",// 20
|
|---|
| 76 | "VSD_QUERYINPUTLEVEL",// 21
|
|---|
| 77 | "VSD_QUERYINPUTLEVELS",// 22
|
|---|
| 78 | "VSD_QUERYKEYLOCK",// 23
|
|---|
| 79 | "VSD_QUERYLABEL",// 24
|
|---|
| 80 | "VSD_QUERYLENGTH",// 25
|
|---|
| 81 | "VSD_QUERYMEDIATYPE",// 26
|
|---|
| 82 | "VSD_QUERYMONITOR",// 27
|
|---|
| 83 | "VSD_QUERYPOSITION",// 28
|
|---|
| 84 | "VSD_QUERYPREROLLTYPE",// 29
|
|---|
| 85 | "VSD_QUERYPROCESSINTERNAL",// 30
|
|---|
| 86 | "VSD_QUERYRATE",// 31
|
|---|
| 87 | "VSD_QUERYRATELEVELS",// 32
|
|---|
| 88 | "VSD_QUERYSTATUSLEVEL",// 33
|
|---|
| 89 | "VSD_QUERYSUPPORTEDEVENTS",// 34
|
|---|
| 90 | "VSD_QUERYTIME",// 35
|
|---|
| 91 | "VSD_QUERYTOC",// 36
|
|---|
| 92 | "VSD_QUERYTRACKS",// 37
|
|---|
| 93 | "VSD_QUERYTTSATTRIBUTES",// 38
|
|---|
| 94 | "VSD_QUERYUPC",// 39
|
|---|
| 95 | "VSD_QUERYVIDEO",// 40
|
|---|
| 96 | "VSD_QUERYVIDEOATTRIBUTES",// 41
|
|---|
| 97 | "VSD_QUERYVIEWPORT",// 42
|
|---|
| 98 | "VSD_QUERYVIEWPORTPOSITION",// 43
|
|---|
| 99 | "VSD_QUERYVOLUME",// 44
|
|---|
| 100 | "VSD_QUERYVIDEORECT",// 45
|
|---|
| 101 | "VSD_QUERYFPS",// 46
|
|---|
| 102 | "VSD_QUERYIMAGEFORMAT",// 47
|
|---|
| 103 | "VSD_QUERYIMAGEEXTENTS",// 48
|
|---|
| 104 | "VSD_QUERYVIDEOEXTENTS",// 49
|
|---|
| 105 | "VSD_QUERYOVERLAYEXTENTS",// 50
|
|---|
| 106 | "VSD_QUERYTRANSPARENTCOLOR",// 51
|
|---|
| 107 | "VSD_QUERYCOLORKEYING",// 52
|
|---|
| 108 | "VSD_QUERYREADY",// 53
|
|---|
| 109 | "VSD_QUERYMIXSTATE",// 54
|
|---|
| 110 | "VSD_QUERYMIXCONNECTIONS",// 55
|
|---|
| 111 | "VSD_QUERYMIXCONTROL",// 56
|
|---|
| 112 | "VSD_QUERYMIXLINE",// 57
|
|---|
| 113 | "VSD_QUERYTUNERCHANNEL",// 58
|
|---|
| 114 | "VSD_QUERYCONNECTORSIGNAL",// 59
|
|---|
| 115 | "VSD_QUERYLOAD",// 60
|
|---|
| 116 | "VSD_QUERYCONNECTION"// 61
|
|---|
| 117 | };
|
|---|
| 118 |
|
|---|
| 119 | PSZ pszSet[] = {
|
|---|
| 120 | "", // 0
|
|---|
| 121 | "VSD_SETVIDEO",// 1
|
|---|
| 122 | "VSD_SETVOLUME",// 2
|
|---|
| 123 | "VSD_SETDISPLAY",// 3
|
|---|
| 124 | "VSD_SETVIDEOATTRIBUTES",// 4
|
|---|
| 125 | "VSD_SETIMAGEATTRIBUTES",// 5
|
|---|
| 126 | "VSD_SETTSATTRRIBUTES",// 6
|
|---|
| 127 | "VSD_SETINPUTLEVEL",// 7
|
|---|
| 128 | "VSD_SETMONITOR",// 8
|
|---|
| 129 | "VSD_SETDATATYPE",// 9
|
|---|
| 130 | "VSD_SETDOOR",// 10
|
|---|
| 131 | "VSD_SETCOMMSETTINGS",// 11
|
|---|
| 132 | "VSD_SETRATE",// 12
|
|---|
| 133 | "VSD_SETKEYLOCK",// 13
|
|---|
| 134 | "VSD_SETCUE",// 14
|
|---|
| 135 | "VSD_SETCOUNTER",// 15
|
|---|
| 136 | "VSD_SETPOSITION",// 16
|
|---|
| 137 | "VSD_SETCONNECTOR",// 17
|
|---|
| 138 | "VSD_SETDIRECTION",// 18
|
|---|
| 139 | "VSD_SETVIEWPORTPOSITION",// 19
|
|---|
| 140 | "VSD_SETVIEWPORT",// 20
|
|---|
| 141 | "VSD_SETBANK",// 21
|
|---|
| 142 | "VSD_SETVIDEORECT",// 22
|
|---|
| 143 | "VSD_SETIMAGEFORMAT",// 23
|
|---|
| 144 | "VSD_SETFPS",// 24
|
|---|
| 145 | "VSD_SETTRANSPARENTCOLOR",// 25
|
|---|
| 146 | "VSD_SETCOLORKEYING",// 26
|
|---|
| 147 | "VSD_SETAUDIOATTRIBUTES",// 27
|
|---|
| 148 | "VSD_SETMIXSTATE",// 28
|
|---|
| 149 | "VSD_SETMIXCONNECTIONS",// 29
|
|---|
| 150 | "VSD_SETMIXCONTROL",// 30
|
|---|
| 151 | "VSD_SETTUNERCHANNEL",// 31
|
|---|
| 152 | "VSD_SETCLIPLIST",// 32
|
|---|
| 153 | "VSD_SETCONNECTION" // 33
|
|---|
| 154 | };
|
|---|
| 155 |
|
|---|
| 156 | PSZ pszDDCMD[] = {
|
|---|
| 157 | "DDCMD_SETUP", // 0L
|
|---|
| 158 | "DDCMD_READ", // 1L
|
|---|
| 159 | "DDCMD_WRITE", // 2L
|
|---|
| 160 | "DDCMD_STATUS", // 3L
|
|---|
| 161 | "DDCMD_CONTROL", // 4L
|
|---|
| 162 | "DDCMD_REG_STREAM",// 5L
|
|---|
| 163 | "DDCMD_DEREG_STREAM" // 6L
|
|---|
| 164 | };
|
|---|
| 165 |
|
|---|
| 166 | PSZ pszCmd[] = {
|
|---|
| 167 | "DDCMD_START", // 1
|
|---|
| 168 | "DDCMD_STOP", // 2
|
|---|
| 169 | "DDCMD_PAUSE", // 3
|
|---|
| 170 | "DDCMD_RESUME", // 4
|
|---|
| 171 | "DDCMD_ENABLE_EVENT", // 5
|
|---|
| 172 | "DDCMD_DISABLE_EVENT", // 6
|
|---|
| 173 | "DDCMD_PAUSE_TIME", // 7
|
|---|
| 174 | "DDCMD_RESUME_TIME" // 8
|
|---|
| 175 | };
|
|---|
| 176 |
|
|---|
| 177 | /************************ START OF SPECIFICATIONS **************************
|
|---|
| 178 | *
|
|---|
| 179 | * SUBROUTINE NAME: VSDEntry
|
|---|
| 180 | *
|
|---|
| 181 | * FUNCTION: Ring 3 entry point for AUDIOIF calls from Amp/Mixer
|
|---|
| 182 | *
|
|---|
| 183 | * INPUT: HVSD hvsd Handle to the VSD
|
|---|
| 184 | * ULONG ulFunc Function to operate (i.e. VSD_OPEN, VSD_SET etc.)
|
|---|
| 185 | * ULONG ulFlags Flags to manipulate function
|
|---|
| 186 | * PVOID pRequest Pointer to function specific parameter.
|
|---|
| 187 | *
|
|---|
| 188 | * OUTPUT: returns VSDERR_SUCCESS if successful, otherwise it returns an
|
|---|
| 189 | * MCI error code.
|
|---|
| 190 | *
|
|---|
| 191 | *************************** END OF SPECIFICATIONS *************************/
|
|---|
| 192 |
|
|---|
| 193 | ULONG APIENTRY MM_VSDLOGEntry( HVSD hvsd,
|
|---|
| 194 | ULONG ulFunc,
|
|---|
| 195 | ULONG ulFlags,
|
|---|
| 196 | PVOID pRequest )
|
|---|
| 197 |
|
|---|
| 198 | {
|
|---|
| 199 | LONG lError = VSDERR_SUCCESS;
|
|---|
| 200 | CHAR szFail[CCHMAXPATH];
|
|---|
| 201 | PSZ pszEnv;
|
|---|
| 202 | ULONG rc;
|
|---|
| 203 | HMODULE hmod;
|
|---|
| 204 | PSZ p;
|
|---|
| 205 |
|
|---|
| 206 | if (!fInitialized) {
|
|---|
| 207 | // SET VSDLOG_REALVSD=n,SB16VSD
|
|---|
| 208 | // where n is the ordinal number of AmpMix01 of the ampmixer
|
|---|
| 209 | // to debug.
|
|---|
| 210 | if (!DosScanEnv("VSDLOG_REALVSD", (PSZ*)&pszEnv)) {
|
|---|
| 211 | p = strchr (pszEnv, ',');
|
|---|
| 212 | if (p) p++;
|
|---|
| 213 | strcpy (szFail, p);
|
|---|
| 214 | if (p = strchr(szFail, ';')) *p = 0; /* Remove After semicolon */
|
|---|
| 215 | if (!(rc = DosLoadModule(szFail, CCHMAXPATH, szFail, &hmod))) {
|
|---|
| 216 | if (!(rc = DosQueryProcAddr (hmod, 0L, "VSDEntry", (PFN*)&pfnRealVSD))) {
|
|---|
| 217 | fInitialized = TRUE;
|
|---|
| 218 | } else {
|
|---|
| 219 | LogItToVSDLogFile2 ("QueryProcAddr Failed", rc, "VSDEntry", 0);
|
|---|
| 220 | return (VSDERR_UNSUPPORTED_FUNCTION);
|
|---|
| 221 | }
|
|---|
| 222 | } else {
|
|---|
| 223 | LogItToVSDLogFile2 ("Load Module of Real VSD Failed", rc, szFail, 0);
|
|---|
| 224 | return (VSDERR_UNSUPPORTED_FUNCTION);
|
|---|
| 225 | }
|
|---|
| 226 | } else {
|
|---|
| 227 | LogItToVSDLogFile2 ("SET REALVSD= Missing", 0, "", 0);
|
|---|
| 228 | return (VSDERR_UNSUPPORTED_FUNCTION);
|
|---|
| 229 | }
|
|---|
| 230 | }
|
|---|
| 231 |
|
|---|
| 232 | switch( ulFunc ) {
|
|---|
| 233 |
|
|---|
| 234 | /**************************************
|
|---|
| 235 | * Required functions for all VSD's.
|
|---|
| 236 | **************************************/
|
|---|
| 237 | /********************************************
|
|---|
| 238 | * The first call a VSD will receive is an OPEN
|
|---|
| 239 | *********************************************/
|
|---|
| 240 |
|
|---|
| 241 | case VSD_OPEN:
|
|---|
| 242 | lError = VSDLOGOpen(hvsd, ulFunc, ulFlags, ( PVSD_OPEN_PARMS ) pRequest );
|
|---|
| 243 | break;
|
|---|
| 244 |
|
|---|
| 245 | case VSD_DEVUNITS:
|
|---|
| 246 | lError = VSDLOGDevUnits(hvsd, ulFunc, ulFlags, ( PVSD_DEVUNITS_PARMS )pRequest );
|
|---|
| 247 | break;
|
|---|
| 248 |
|
|---|
| 249 | case VSD_RESOURCE:
|
|---|
| 250 | lError = VSDLOGResource(hvsd, ulFunc, ulFlags, ( PVSD_RESOURCE_PARMS ) pRequest );
|
|---|
| 251 | break;
|
|---|
| 252 |
|
|---|
| 253 | case VSD_RESTORE:
|
|---|
| 254 | lError = VSDLOGRestore(hvsd, ulFunc, ulFlags, ( PVSD_RESTORE_PARMS ) pRequest );
|
|---|
| 255 | break;
|
|---|
| 256 |
|
|---|
| 257 | case VSD_SAVE:
|
|---|
| 258 | lError = VSDLOGSave(hvsd, ulFunc, ulFlags, pRequest);
|
|---|
| 259 | break;
|
|---|
| 260 |
|
|---|
| 261 | case VSD_CLOSE:
|
|---|
| 262 | lError = VSDLOGClose(hvsd, ulFunc, ulFlags, pRequest);
|
|---|
| 263 | break;
|
|---|
| 264 |
|
|---|
| 265 | case VSD_GETDEVCAPS:
|
|---|
| 266 | lError = VSDLOGCaps(hvsd, ulFunc, ulFlags, ( PVSD_GETDEVCAPS_PARMS )pRequest);
|
|---|
| 267 | break;
|
|---|
| 268 |
|
|---|
| 269 | case VSD_QUERY:
|
|---|
| 270 | lError = VSDLOGQuery(hvsd, ulFunc, ulFlags, pRequest);
|
|---|
| 271 | break;
|
|---|
| 272 |
|
|---|
| 273 | /**************************************
|
|---|
| 274 | * Basic commands
|
|---|
| 275 | **************************************/
|
|---|
| 276 |
|
|---|
| 277 | case VSD_SET:
|
|---|
| 278 | lError = VSDLOGSetCommand(hvsd, ulFunc, ulFlags, pRequest );
|
|---|
| 279 | break;
|
|---|
| 280 |
|
|---|
| 281 | /**************************************
|
|---|
| 282 | * Other commands
|
|---|
| 283 | **************************************/
|
|---|
| 284 |
|
|---|
| 285 | // Merge of DDCMD.DLL with VSD.
|
|---|
| 286 | case VSD_DDCMD:
|
|---|
| 287 | lError = VSDLOGDDCMD (hvsd, ulFunc, ulFlags, pRequest);
|
|---|
| 288 | break;
|
|---|
| 289 |
|
|---|
| 290 | case VSD_ESCAPE:
|
|---|
| 291 | case VSD_EVENTS :
|
|---|
| 292 |
|
|---|
| 293 | /* Unsupported commands */
|
|---|
| 294 |
|
|---|
| 295 | case VSD_CAPTUREIMAGE :
|
|---|
| 296 | case VSD_EJECT :
|
|---|
| 297 | case VSD_FREEZE :
|
|---|
| 298 | case VSD_INSERTSETTINGSPAGE :
|
|---|
| 299 | case VSD_LOAD :
|
|---|
| 300 | case VSD_PARK :
|
|---|
| 301 | case VSD_RESET :
|
|---|
| 302 | case VSD_RESTOREIMAGE :
|
|---|
| 303 | case VSD_SEEK :
|
|---|
| 304 | case VSD_STEP :
|
|---|
| 305 | lError = VSDLOGOther (hvsd, ulFunc, ulFlags, pRequest);
|
|---|
| 306 | break;
|
|---|
| 307 |
|
|---|
| 308 | /*----------------------------------------------------
|
|---|
| 309 | * Audio VSDs DO NOT have to support getProdInfo (unless
|
|---|
| 310 | * they want to). No portion of MMPM2 will call the VSD
|
|---|
| 311 | * requesting this info (remember, this is true only for
|
|---|
| 312 | * audio). This information is obtained by the mixer
|
|---|
| 313 | * via an MCI_SYSINFO call since each driver must place
|
|---|
| 314 | * the information in the ini file when it is installed.
|
|---|
| 315 | *---------------------------------------------------*/
|
|---|
| 316 | case VSD_GETPRODINFO:
|
|---|
| 317 | lError = VSDLOGGetProdInfo(hvsd, ulFunc, ulFlags, (PVSD_GETPRODINFO_PARMS) pRequest);
|
|---|
| 318 | break;
|
|---|
| 319 |
|
|---|
| 320 | /*---------------------------------------------------------*
|
|---|
| 321 | * Unknown message received
|
|---|
| 322 | *---------------------------------------------------------*/
|
|---|
| 323 |
|
|---|
| 324 | default:
|
|---|
| 325 | lError = VSDERR_UNRECOGNIZED_COMMAND;
|
|---|
| 326 | LogItToVSDLogFile2 ("Unknown VSD Command", ulFunc, "rc:", lError);
|
|---|
| 327 | break;
|
|---|
| 328 | }
|
|---|
| 329 |
|
|---|
| 330 | return(lError);
|
|---|
| 331 |
|
|---|
| 332 | } /* VSDEntry */
|
|---|
| 333 |
|
|---|
| 334 |
|
|---|
| 335 | //
|
|---|
| 336 | // LogItToVSDLogFile - this is not a class member, so we can easily set a breakpoint on this name in kernal debug
|
|---|
| 337 | //
|
|---|
| 338 | // if MMLOGFILE is set,
|
|---|
| 339 | // Then Log to filename or 1 for stdout
|
|---|
| 340 | // else Log to stdout
|
|---|
| 341 | //
|
|---|
| 342 | void EXPENTRY LogItToVSDLogFile (char * c)
|
|---|
| 343 | {
|
|---|
| 344 | unsigned long cbwrite;
|
|---|
| 345 | char * pszEnv;
|
|---|
| 346 |
|
|---|
| 347 | if (hvsdLogFile == -1) {
|
|---|
| 348 | if (DosScanEnv ("VSDLOG_LOGFILE", (PSZ *)&pszEnv)) {
|
|---|
| 349 | hvsdLogFile = 0; // no logging
|
|---|
| 350 | } else {
|
|---|
| 351 | if (!strcmp(pszEnv, "1")) {
|
|---|
| 352 | hvsdLogFile = 1; // log to stdout
|
|---|
| 353 | } else {
|
|---|
| 354 | ULONG act = 0;
|
|---|
| 355 | if (DosOpen (pszEnv,&hvsdLogFile,&act,0L,0,FILE_CREATE | FILE_TRUNCATE,
|
|---|
| 356 | OPEN_FLAGS_NOINHERIT | OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE | OPEN_FLAGS_WRITE_THROUGH,
|
|---|
| 357 | 0L)) {
|
|---|
| 358 | hvsdLogFile = 1; // can't open but still want to log
|
|---|
| 359 | }
|
|---|
| 360 | }
|
|---|
| 361 | }
|
|---|
| 362 | }
|
|---|
| 363 |
|
|---|
| 364 | if (hvsdLogFile) {
|
|---|
| 365 | DosWrite (hvsdLogFile, c, strlen(c), &cbwrite);
|
|---|
| 366 | DosWrite (hvsdLogFile, "\r\n", 2, &cbwrite);
|
|---|
| 367 | }
|
|---|
| 368 | }
|
|---|
| 369 |
|
|---|
| 370 |
|
|---|
| 371 | void EXPENTRY LogItToVSDLogFile2 (char * c, ULONG l1, char * c2, ULONG l2)
|
|---|
| 372 | {
|
|---|
| 373 | CHAR szLine[CCHMAXPATH];
|
|---|
| 374 | strcpy (szLine, c);
|
|---|
| 375 | strcat (szLine, " ");
|
|---|
| 376 | itoa(l1, &szLine[strlen(szLine)], 10);
|
|---|
| 377 | strcat (szLine, " ");
|
|---|
| 378 | strcat (szLine, c2);
|
|---|
| 379 | strcat (szLine, " ");
|
|---|
| 380 | itoa(l2, &szLine[strlen(szLine)], 10);
|
|---|
| 381 | LogItToVSDLogFile(szLine);
|
|---|
| 382 | }
|
|---|
| 383 |
|
|---|
| 384 | void EXPENTRY LogItToVSDLogFile3 (HVSD hvsd, ULONG ulFunc, PSZ pszFunc, ULONG ulFlags, PSZ pszReq)
|
|---|
| 385 | {
|
|---|
| 386 | CHAR szLine[CCHMAXPATH];
|
|---|
| 387 | strcpy (szLine, "");
|
|---|
| 388 | LogItToVSDLogFile(szLine);
|
|---|
| 389 |
|
|---|
| 390 | itoa((ULONG)hvsd, szLine, 16);
|
|---|
| 391 | strcat (szLine, " ");
|
|---|
| 392 | itoa(ulFunc, &szLine[strlen(szLine)], 10);
|
|---|
| 393 | strcat (szLine, " ");
|
|---|
| 394 | strcat (szLine, pszFunc);
|
|---|
| 395 | strcat (szLine, " ");
|
|---|
| 396 | itoa(ulFlags, &szLine[strlen(szLine)], 16);
|
|---|
| 397 | strcat (szLine, " ");
|
|---|
| 398 | strcat (szLine, pszReq);
|
|---|
| 399 | LogItToVSDLogFile(szLine);
|
|---|
| 400 | }
|
|---|
| 401 |
|
|---|
| 402 | void EXPENTRY LogItToVSDLogFile4 (PBYTE pRequest)
|
|---|
| 403 | {
|
|---|
| 404 | PULONG pData;
|
|---|
| 405 | ULONG ulLen,i,j;
|
|---|
| 406 | CHAR szLine[CCHMAXPATH*2];
|
|---|
| 407 | CHAR szNumber[10];
|
|---|
| 408 |
|
|---|
| 409 | if (!pRequest) return;
|
|---|
| 410 | ulLen = *(PULONG)pRequest/4;
|
|---|
| 411 |
|
|---|
| 412 | strcpy (szLine, "Request: ");
|
|---|
| 413 | for (i=0; i<ulLen && i<20; i++) {
|
|---|
| 414 | itoa ((ULONG)((PULONG)pRequest)[i], szNumber, 16);
|
|---|
| 415 | for (j=0; j<9-strlen(szNumber); j++) strcat (szLine, "0");
|
|---|
| 416 | itoa ((ULONG)((PULONG)pRequest)[i], &szLine[strlen(szLine)], 16);
|
|---|
| 417 | strcat (szLine, " ");
|
|---|
| 418 | }
|
|---|
| 419 | LogItToVSDLogFile(szLine);
|
|---|
| 420 | }
|
|---|
| 421 |
|
|---|
| 422 | LONG VSDLOGOpen (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_OPEN_PARMS pRequest)
|
|---|
| 423 | {
|
|---|
| 424 | LONG lError;
|
|---|
| 425 | CHAR szLine[CCHMAXPATH];
|
|---|
| 426 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_OPEN", ulFlags, "");
|
|---|
| 427 | LogItToVSDLogFile2 (" ulCategory:", pRequest->ulCategory, "", 0);
|
|---|
| 428 | LogItToVSDLogFile2 (" szInstallName:", 0, pRequest->szInstallName, 0);
|
|---|
| 429 | LogItToVSDLogFile2 (" szPDDName:", 0, pRequest->szPDDName, 0);
|
|---|
| 430 | LogItToVSDLogFile2 (" ulSampleRate:", ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->ulSamplingRate, "", 0);
|
|---|
| 431 | LogItToVSDLogFile2 (" ulBitsPerSample:", ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->ulBitsPerSample, "", 0);
|
|---|
| 432 | LogItToVSDLogFile2 (" ulChannels:", ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->ulChannels, "", 0);
|
|---|
| 433 | LogItToVSDLogFile2 (" ulDataType:", ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->ulDataType, "", 0);
|
|---|
| 434 | LogItToVSDLogFile2 (" ulDeviceID:", ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->ulDeviceID, "", 0);
|
|---|
| 435 | LogItToVSDLogFile2 (" ulOperation:", ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->ulOperation, "", 0);
|
|---|
| 436 | LogItToVSDLogFile2 (" ParmString:", 0, ((VSD_AUDIOOPEN_PARMS*)pRequest->pDevInfo)->pParmString, 0);
|
|---|
| 437 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 438 | LogItToVSDLogFile2 (" HVSD:", (ULONG)pRequest->hvsd, "", 0);
|
|---|
| 439 | LogItToVSDLogFile2 ("VSD_OPEN", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 440 | return (lError);
|
|---|
| 441 | }
|
|---|
| 442 |
|
|---|
| 443 | LONG VSDLOGQuery (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest )
|
|---|
| 444 | {
|
|---|
| 445 | LONG lError;
|
|---|
| 446 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_QUERY", ulFlags, pszQuery[ulFlags]);
|
|---|
| 447 | if (ulFlags != VSD_QUERYMONITOR) {
|
|---|
| 448 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 449 | }
|
|---|
| 450 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 451 | if (ulFlags != VSD_QUERYMONITOR) {
|
|---|
| 452 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 453 | } else {
|
|---|
| 454 | LogItToVSDLogFile2 ("fMonitor:", (ULONG)*(PULONG)pRequest, "", (ULONG)0);
|
|---|
| 455 | }
|
|---|
| 456 | LogItToVSDLogFile2 ("VSD_QUERY", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 457 | return (lError);
|
|---|
| 458 | }
|
|---|
| 459 |
|
|---|
| 460 | LONG VSDLOGClose (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest )
|
|---|
| 461 | {
|
|---|
| 462 | LONG lError;
|
|---|
| 463 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_CLOSE", ulFlags, "");
|
|---|
| 464 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 465 | LogItToVSDLogFile2 ("VSD_CLOSE", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 466 | return (lError);
|
|---|
| 467 | }
|
|---|
| 468 |
|
|---|
| 469 | LONG VSDLOGSave (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest )
|
|---|
| 470 | {
|
|---|
| 471 | LONG lError;
|
|---|
| 472 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_SAVE", ulFlags, "");
|
|---|
| 473 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 474 | LogItToVSDLogFile2 ("VSD_SAVE", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 475 | return (lError);
|
|---|
| 476 | }
|
|---|
| 477 |
|
|---|
| 478 | LONG VSDLOGRestore(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_RESTORE_PARMS pRequest )
|
|---|
| 479 | {
|
|---|
| 480 | LONG lError;
|
|---|
| 481 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_RESTORE", ulFlags, "");
|
|---|
| 482 | LogItToVSDLogFile4 ((PBYTE)pRequest);
|
|---|
| 483 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 484 | LogItToVSDLogFile4 ((PBYTE)pRequest);
|
|---|
| 485 | LogItToVSDLogFile2 ("VSD_RESTORE", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 486 | return (lError);
|
|---|
| 487 | }
|
|---|
| 488 |
|
|---|
| 489 | LONG VSDLOGDevUnits(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_DEVUNITS_PARMS pRequest )
|
|---|
| 490 | {
|
|---|
| 491 | LONG lError;
|
|---|
| 492 | ULONG i;
|
|---|
| 493 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_DEVUNITS", ulFlags, "");
|
|---|
| 494 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 495 | LogItToVSDLogFile2 (" ulUnits", pRequest->ulUnits, "", 0);
|
|---|
| 496 | for (i=0; i<pRequest->ulUnits; i++) {
|
|---|
| 497 | LogItToVSDLogFile2 (" ulDevType", pRequest->VSD_Unit[i].ulDevType, "", 0);
|
|---|
| 498 | LogItToVSDLogFile2 (" szUnit", 0, pRequest->VSD_Unit[i].szUNIT, 0);
|
|---|
| 499 | }
|
|---|
| 500 | LogItToVSDLogFile2 ("VSD_DEVUNITS", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 501 | return (lError);
|
|---|
| 502 | }
|
|---|
| 503 |
|
|---|
| 504 | LONG VSDLOGResource(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_RESOURCE_PARMS pRequest )
|
|---|
| 505 | {
|
|---|
| 506 | LONG lError;
|
|---|
| 507 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_RESOURCE", ulFlags, "");
|
|---|
| 508 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 509 | LogItToVSDLogFile2 (" szPDDName", 0, pRequest->szPDDName, 0);
|
|---|
| 510 | LogItToVSDLogFile2 (" ulDevType", pRequest->ulDevType, "", 0);
|
|---|
| 511 | LogItToVSDLogFile2 (" ulDataType", pRequest->ulDataType, "", 0);
|
|---|
| 512 | LogItToVSDLogFile2 (" ulResUnits", pRequest->ulResUnits, "", 0);
|
|---|
| 513 | LogItToVSDLogFile2 (" ulClass", pRequest->ulClass, "", 0);
|
|---|
| 514 | LogItToVSDLogFile2 ("VSD_RESOURCE", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 515 | return (lError);
|
|---|
| 516 | }
|
|---|
| 517 |
|
|---|
| 518 | LONG VSDLOGSetCommand(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest )
|
|---|
| 519 | {
|
|---|
| 520 | LONG lError;
|
|---|
| 521 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_SETCOMMAND", ulFlags, pszSet[ulFlags]);
|
|---|
| 522 | if (ulFlags == VSD_SETMONITOR) {
|
|---|
| 523 | LogItToVSDLogFile2 ("fMonitor:", (ULONG)pRequest, "", (ULONG)0);
|
|---|
| 524 | } else {
|
|---|
| 525 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 526 | }
|
|---|
| 527 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 528 | if (ulFlags == VSD_SETMONITOR) {
|
|---|
| 529 | LogItToVSDLogFile2 ("fMonitor:", (ULONG)pRequest, "", (ULONG)0);
|
|---|
| 530 | } else {
|
|---|
| 531 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 532 | }
|
|---|
| 533 | LogItToVSDLogFile2 ("VSD_SETCOMMAND", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 534 | return (lError);
|
|---|
| 535 | }
|
|---|
| 536 |
|
|---|
| 537 | LONG VSDLOGGetProdInfo(HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_GETPRODINFO_PARMS pRequest)
|
|---|
| 538 | {
|
|---|
| 539 | LONG lError;
|
|---|
| 540 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_GETPRODINFO", ulFlags, "");
|
|---|
| 541 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 542 | LogItToVSDLogFile2 (" VSD.szProdInfo", 0, pRequest->VSD.szProdInfo, 0);
|
|---|
| 543 | LogItToVSDLogFile2 (" VSD.szManufacture", 0, pRequest->VSD.szManufacture, 0);
|
|---|
| 544 | LogItToVSDLogFile2 (" VSD.szVersion", 0, pRequest->VSD.szVersion, 0);
|
|---|
| 545 | LogItToVSDLogFile2 (" PDD.szProdInfo", 0, pRequest->PDD.szProdInfo, 0);
|
|---|
| 546 | LogItToVSDLogFile2 (" PDD.szManufacture", 0, pRequest->PDD.szManufacture, 0);
|
|---|
| 547 | LogItToVSDLogFile2 (" PDD.szVersion", 0, pRequest->PDD.szVersion, 0);
|
|---|
| 548 | LogItToVSDLogFile2 ("VSD_GETPRODINFO", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 549 | return (lError);
|
|---|
| 550 | }
|
|---|
| 551 |
|
|---|
| 552 | LONG VSDLOGCaps (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVSD_GETDEVCAPS_PARMS pRequest )
|
|---|
| 553 | {
|
|---|
| 554 | LONG lError;
|
|---|
| 555 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_CAPS", ulFlags, "");
|
|---|
| 556 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 557 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 558 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 559 | LogItToVSDLogFile2 ("VSD_CAPS", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 560 | return (lError);
|
|---|
| 561 | }
|
|---|
| 562 |
|
|---|
| 563 | LONG VSDLOGOther (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest)
|
|---|
| 564 | {
|
|---|
| 565 | LONG lError;
|
|---|
| 566 | LogItToVSDLogFile3 (hvsd, ulFunc, "?", ulFlags, "");
|
|---|
| 567 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 568 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 569 | LogItToVSDLogFile4((PBYTE)pRequest);
|
|---|
| 570 | LogItToVSDLogFile2 ("?", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 571 | return (lError);
|
|---|
| 572 | }
|
|---|
| 573 |
|
|---|
| 574 |
|
|---|
| 575 | LONG VSDLOGDDCMD (HVSD hvsd, ULONG ulFunc, ULONG ulFlags, PVOID pRequest)
|
|---|
| 576 | {
|
|---|
| 577 | LONG lError;
|
|---|
| 578 | ULONG i;
|
|---|
| 579 | PDDCMDCOMMON pCommon = (PDDCMDCOMMON) pRequest;
|
|---|
| 580 |
|
|---|
| 581 | LogItToVSDLogFile3 (hvsd, ulFunc, "VSD_DDCMD", ulFlags, pszDDCMD[pCommon->ulFunction]);
|
|---|
| 582 | LogItToVSDLogFile2 (" hStream", 0, "", (ULONG)pCommon->hStream);
|
|---|
| 583 |
|
|---|
| 584 | switch (pCommon->ulFunction)
|
|---|
| 585 | {
|
|---|
| 586 | case DDCMD_READ:
|
|---|
| 587 | case DDCMD_WRITE:
|
|---|
| 588 | LogItToVSDLogFile2 ("Buffer:", (ULONG)((DDCMDREADWRITE*)pCommon)->pBuffer, (((DDCMDREADWRITE*)pCommon)->fEOS ? "EOS BufLen:" : "BufLen:"), (ULONG)((DDCMDREADWRITE*)pCommon)->ulBufferSize);
|
|---|
| 589 | break;
|
|---|
| 590 |
|
|---|
| 591 | case DDCMD_CONTROL:
|
|---|
| 592 | LogItToVSDLogFile2 (" Command:", ((DDCMDCONTROL*)pCommon)->ulCmd, pszCmd[((DDCMDCONTROL*)pCommon)->ulCmd], 0);
|
|---|
| 593 | break;
|
|---|
| 594 |
|
|---|
| 595 | case DDCMD_REG_STREAM:
|
|---|
| 596 | LogItToVSDLogFile2 (" Reg:", 0, "ulSysFileNum", ((DDCMDREGISTER*)pCommon)->ulSysFileNum);
|
|---|
| 597 | LogItToVSDLogFile2 (" Reg:", 0, "ulStreamOperation", ((DDCMDREGISTER*)pCommon)->ulStreamOperation);
|
|---|
| 598 | LogItToVSDLogFile2 (" Reg:", 0, "hid", ((DDCMDREGISTER*)pCommon)->hid);
|
|---|
| 599 | LogItToVSDLogFile2 (" Reg:", 0, "lSRate", ((DDCMDREGISTER*)pCommon)->AudioMode.lSRate);
|
|---|
| 600 | LogItToVSDLogFile2 (" Reg:", 0, "lBitsPerSRate", ((DDCMDREGISTER*)pCommon)->AudioMode.lBitsPerSRate);
|
|---|
| 601 | LogItToVSDLogFile2 (" Reg:", 0, "sChannels", ((DDCMDREGISTER*)pCommon)->AudioMode.sChannels);
|
|---|
| 602 | LogItToVSDLogFile2 (" Reg:", 0, "SPCB datatype", ((DDCMDREGISTER*)pCommon)->spcbkey.ulDataType);
|
|---|
| 603 | break;
|
|---|
| 604 | }
|
|---|
| 605 | lError = (*pfnRealVSD)(hvsd, ulFunc, ulFlags, (PVOID)pRequest);
|
|---|
| 606 | switch (pCommon->ulFunction)
|
|---|
| 607 | {
|
|---|
| 608 | case DDCMD_REG_STREAM:
|
|---|
| 609 | LogItToVSDLogFile2 (" Reg:", 0, "ulBufSize", ((DDCMDREGISTER*)pCommon)->ulBufSize);
|
|---|
| 610 | LogItToVSDLogFile2 (" Reg:", 0, "ulNumBufs", ((DDCMDREGISTER*)pCommon)->ulNumBufs);
|
|---|
| 611 | break;
|
|---|
| 612 | }
|
|---|
| 613 | LogItToVSDLogFile2 ("VSD_DDCMD", (ULONG)pRequest, "rc:", (ULONG)lError);
|
|---|
| 614 | return (lError);
|
|---|
| 615 | }
|
|---|
| 616 |
|
|---|
| 617 |
|
|---|
| 618 | LONG EXPENTRY VSDLOGSHDEntryPoint (ULONG event, PVOID pMsg)
|
|---|
| 619 | {
|
|---|
| 620 | ULONG i;
|
|---|
| 621 | PMSG_REPORTINT pInt;
|
|---|
| 622 | PMSG_REPORTEVENT pEvent;
|
|---|
| 623 |
|
|---|
| 624 | if (hvsdLogFile && fInitialized) {
|
|---|
| 625 | switch (event) {
|
|---|
| 626 | case VSDLOG_REPORTINT:
|
|---|
| 627 | pInt = (PMSG_REPORTINT) pMsg;
|
|---|
| 628 | LogItToVSDLogFile ("");
|
|---|
| 629 | LogItToVSDLogFile2 ("SHDReportInt", (ULONG)0, "Buffer:", (ULONG)pInt->pBuffer);
|
|---|
| 630 | LogItToVSDLogFile2 (" Flags:", (ULONG)pInt->ulFlag, "Status:", (ULONG)pInt->ulStatus);
|
|---|
| 631 | break;
|
|---|
| 632 | case VSDLOG_REPORTEVENT:
|
|---|
| 633 | LogItToVSDLogFile ("");
|
|---|
| 634 | pEvent = (PMSG_REPORTEVENT) pMsg;
|
|---|
| 635 | LogItToVSDLogFile2 ("SHDReportEvent", (ULONG)0, "Event:", (ULONG)pEvent->hevent);
|
|---|
| 636 | break;
|
|---|
| 637 | case VSDLOG_REPORTERROR:
|
|---|
| 638 | LogItToVSDLogFile ("");
|
|---|
| 639 | LogItToVSDLogFile2 ("REPORT_ERROR", (ULONG)0, "Error:", (ULONG)pMsg);
|
|---|
| 640 | break;
|
|---|
| 641 | }
|
|---|
| 642 | }
|
|---|
| 643 | return (0);
|
|---|
| 644 | }
|
|---|
| 645 |
|
|---|