/*++

Copyright (c) 1993  Microsoft Corporation
Copyright (c) 1993  Logitech Inc.

Module Name:

    debug.c

Abstract:

    Debugging support routines.

Environment:

    Kernel mode only.

Notes:

Revision History:

--*/

#include "stdarg.h"
#include "stdio.h"
#include "string.h"
#include "ntddk.h"
#include "debug.h"


#if DBG
//
// Declare the global debug flag for this driver.
//

ULONG SerialMouseDebug = 0;

//
// Undocumented call (prototype).
// Use it to avoid timing problems and conflicts with the serial device. 
// This call is valid only during initialization and before the display 
// driver takes ownership of the display.
//

VOID HalDisplayString(PSZ Buffer);

static ULONG DebugOutput = DBG_SERIAL;

VOID
_SerMouSetDebugOutput(
    IN ULONG Destination
    )
/*++

Routine Description:

   Set the destination of the debugging string. The options are:
       DBG_COLOR:    Main computer screen.
       DBG_SERIAL:   Serial debugger port

   Note: The output to the DBG_COLOR screen can be used only during 
   initilialization before we switch to graphical mode.

Arguments:

    Destination - The debugging string destination.

Return Value:

    None.

--*/
{
    DebugOutput = Destination;
    return;
}

int
_SerMouGetDebugOutput(
    VOID
    )
/*++

Routine Description:

    Get the current debugger string output destination.

Arguments:

    None.

Return Value:

    Current debugging output destination.

--*/
{
    return DebugOutput;
}

VOID
SerMouDebugPrint(
    ULONG DebugPrintLevel,
    PCSZ DebugMessage,
    ...
    )

/*++

Routine Description:

    Debug print routine.

Arguments:

    Debug print level between 0 and 3, with 3 being the most verbose.

Return Value:

    None.

--*/

{
    va_list ap;

    va_start(ap, DebugMessage);

    if (DebugPrintLevel <= SerialMouseDebug) {

        CHAR buffer[128];

        (VOID) vsprintf(buffer, DebugMessage, ap);

        if (DebugOutput & DBG_SERIAL) {
            DbgPrint(buffer);
        }

        if (DebugOutput & DBG_COLOR) {
            HalDisplayString(buffer);
        }
    }

    va_end(ap);

}
#endif