5.2  DriverWizard Walkthrough

To use DriverWizard:

  1. Attach your hardware to the computer:
    Attach your device to a USB port on your computer.
  2. Run DriverWizard and select your device:
    1. Start DriverWizard – <path to WinDriver>/wizard/wdwizard. On Windows you can also run DriverWizard from the Start menu: Start | Programs | WinDriver | DriverWizard.
      On Windows 7 and Vista you must run DriverWizard as administrator.
    2. Click New host driver project to start a new project, or Open an existing project to open a saved session.

      Figure 5.1  Create or Open a WinDriver Project

      Create or Open a WinDriver Project

    3. Select your Device from the list of devices detected by DriverWizard.

    Figure 5.2  Select Your Device

    Select Your Device

  3. Generate an INF file for DriverWizard:
    On Windows 7/Vista/Server 2008/Server 2003/XP/2000, the driver for Plug-and-Play devices (such as USB) is installed by installing an INF file for the device. DriverWizard enables you to generate an INF file that registers your device to work with WinDriver (i.e., with the windrvr6.sys driver). The INF file generated by DriverWizard should later be distributed to your customers who are using Windows 7 / Vista / Server 2008 / Server 2003 / XP / 2000, and installed on their PCs.

    The INF file that you generate in this step is also designed to enable DriverWizard to diagnose Plug-and-Play devices on Windows 7 / Vista / Server 2008 / Server 2003 / XP / 2000. Additional information concerning the need for an INF file is provided in section 12.1.1.

    If you do not need to generate an INF file, skip this step and proceed to the next one.

    To generate the INF file with DriverWizard, follow the steps below:

    1. In the Select Your Device screen, click the Generate .INF file button or click Next .
    2. DriverWizard will display information detected for your device – Vendor ID, Product ID, Device Class, manufacturer name and device name – and allow you to modify this information.

      Figure 5.3  DriverWizard INF File Information

      DriverWizard INF File Information

    3. For multiple-interface USB devices, you can select to generate an INF file either for the composite device or for a specific interface.
      • When selecting to generate an INF file for a specific interface of a multi-interface USB device the INF information dialogue will indicate for which interface the INF file is generated.

        Figure 5.4  DriverWizard Multi-Interface INF File Information – Specific Interface

        DriverWizard Multi-Interface INF File Information – Specific Interface

      • When selecting to generate an INF file for a composite device of a multi-interface USB device, the INF information dialogue provides you with the option to either generate an INF file for the root device itself, or generate an INF file for specific interfaces, which you can select from the dialogue.
        Selecting to generate an INF file for the root device will enable you to handle multiple active interfaces simultaneously.

        Figure 5.5  DriverWizard Multi-Interface INF File Information – Composite Device

        DriverWizard Multi-Interface INF File Information – Composite Device

    4. When you are done, click Next and choose the directory in which you wish to store the generated INF file. DriverWizard will then automatically generate the INF file for you.

      You can choose to automatically install the INF file by checking the Automatically Install the INF file option in the DriverWizard's INF generation dialogue.
      If the automatic INF file installation fails, DriverWizard will notify you and provide manual installation instructions (refer also the manual INF file installation instructions in section 12.1).

    5. When the INF file installation completes, select and open your device from the list in the Select Your Device screen.

  4. Uninstall the INF file of your device:
    You can use the Uninstall option to uninstall the INF file of your device. Once you uninstall the INF file, the device will no longer be registered to work with the windrvr6.sys, and the INF file will be deleted from the Windows root directory. If you do not need to uninstall an INF file, skip this step and proceed to the next one.
    1. In the Select Your Device screen, click the Uninstall .INF file button.
    2. Select the INF file to be removed.
  5. Select the desired alternate setting:

    DriverWizard detects all the device's supported alternate settings and displays them, as demonstrated in Figure 5.6 below.
    Select the desired alternate setting from the displayed list.

    DriverWizard will display the pipes information for the selected alternate setting.

    For USB devices with only one alternate setting configured, DriverWizard automatically selects the detected alternate setting and therefore the Select Device Interface dialogue will not be displayed.
  6. Diagnose your device:
    Before writing your device driver, it is important to make sure your hardware is working as expected. Use DriverWizard to diagnose your hardware. All of your activity will be logged in the DriverWizard log so that you may later analyze your tests:
    1. Test your USB device's pipes: DriverWizard shows the pipes detected for the selected alternate setting. To perform USB data transfers on the pipes, follow these steps:

      Figure 5.6  Select Device Interface

      Select Device Interface

      1. Select the desired pipe.
      2. For a control pipe (a bidirectional pipe), click Read / Write. A new dialogue will appear, allowing you to select a standard USB request or define a custom request, as demonstrated in 5.7.

        Figure 5.7  USB Control Transfers

        USB Control Transfers

        When you select one of the available standard USB requests, the setup packet information for the selected request is automatically filled and the request description is displayed in the Request Description box.

        For a custom request, you are required to enter the setup packet information and write data (if exists) yourself. The size of the setup packet should be eight bytes and it should be defined using little endian byte ordering. The setup packet information should conform to the USB specification parameters (bmRequestType, bRequest, wValue, wIndex, wLength).

        More detailed information on the standard USB requests, on how to implement the control transfer and how to send setup packets can be found in section 9.2.
      3. For an input pipe (moves data from device to host) click Listen to Pipe. To successfully accomplish this operation with devices other than HID, you need to first verify that the device sends data to the host. If no data is sent after listening for a short period of time, DriverWizard will notify you that the Transfer Failed.

        To stop reading, click Stop Listen to Pipe.

        Figure 5.8  Listen to Pipe

        Listen to Pipe

      4. For an output pipe (moves data from host to device), click Write to Pipe. A new dialogue box will appear asking you to enter the data to write. The DriverWizard log will contain the result of the operation.

        Figure 5.9  Write to Pipe

        Write to Pipe

      5. You can reset input and output pipes by pressing the Reset Pipe button for the selected pipe.
  7. Generate the skeletal driver code:
    1. Select to generate code either via the Generate Code toolbar icon or from the Project | Generate Code menu.
    2. In the Select Code Generation Options dialogue box that will appear, choose the code language and development environment(s) for the generated code and select Next to generate the code.

      Figure 5.10  Code Generation Options

      Code Generation Options

    3. Save your project (if required) and click OK to open your development environment with the generated driver.
    4. Close DriverWizard.
  8. Compile and run the generated code:

    • Use this code as a starting point for your device driver. Modify where needed to perform your driver's specific functionality.
    • The source code DriverWizard creates can be compiled with any 32-bit compiler, and will run on all supported platforms without modification.

    For detailed compilation instructions, refer to section 5.2.4.

5.2.1  Logging WinDriver API Calls

You have the option to log all the WinDriver API calls using DriverWizard, with the API calls input and output parameters. You can select this option by selecting the Log API calls option from the Tools menu or by clicking on the Log API calls toolbar icon in DriverWizard's opening window.

5.2.2  DriverWizard Logger

The wizard logger is the empty window that opens along with the Device Resources dialogue box when you open a new project. The logger keeps track of all of the input and output during the diagnostics stage, so that you may analyze your device's physical performance at a later time. You can save the log for future reference. When saving the project, your log is saved as well. Each log is associated with one project.

5.2.3  Automatic Code Generation

After you have finished diagnosing your device and have ensured that it runs according to your specifications, you are ready to write your driver.  Generating the Code

Generate code by selecting this option either via DriverWizard's Generate Code toolbar icon or from the wizard's Project | Generate Code menu. DriverWizard will generate the source code for your driver, and place it along with the project file (xxx.wdp, where "xxx" is the project name). The files are saved in a directory DriverWizard creates for every development environment and operating system selected in the code generation dialogue box.  The Generated USB C Code

In the source code directory you now have a new xxx_diag.c source file (where xxx is the name you selected for your DriverWizard project). This file implements a diagnostic USB application, which demonstrates how to use WinDriver's USB API to locate and communicate with your USB device(s), including detection of Plug-and-Play events (device insertion/removal, etc.), performing read/write transfers on the pipes, resetting the pipes and changing the device's active alternate setting.
The generated application supports handling of multiple identical USB devices.  The Generated Visual Basic and Delphi Code

The generated DriverWizard Visual Basic and Delphi code includes similar functions and provides similar functionality as the generated C code described in section

The generated Delphi code implements a console application (like the C code), while the Visual Basic code implements a GUI application.  The Generated C# and Visual Basic .NET Code

The generated DriverWizard C# and Visual Basic .NET code provides similar functionality as the generated C code [], but from a GUI .NET program.

5.2.4  Compiling the Generated Code  Windows and Windows CE Compilation

As explained above, on Windows you can select to generate project and workspace/solution files for any of the supported integrated development environments (IDEs) – MS Visual Studio 5.0/6.0/2003/2005/2008/2010, Borland C++ Builder, Visual Basic 6.0, Borland Delphi, MS eMbedded Visual C++, or MS Platform Builder – and you can also select to automatically invoke your selected IDE from the wizard. You can then proceed to immediately build and run the code from your IDE.

You can also build the generated code from any other IDE that supports the selected code language and target OS. Simply create a new project file for your selected IDE, then add the generated source files to your project and compile and run the code.

  • For Windows 7/Vista/Server 2008/Server 2003/XP/2000, the generated IDE files are located under an x86 directory – for 32-bit projects, or amd64 directory – for 64-bit projects.
  • For Windows CE, note that the generated Windows Mobile code is targeted at the Windows Mobile 5.0/6.0 ARMV4I SDK.  Linux Compilation

Use the makefile that was created for you by DriverWizard in order to build the generated code using your favorite compiler, preferably GCC.

5.2.5  Bus Analyzer Integration – Ellisys Visual USB

DriverWizard provides native support for the Ellisys Explorer 200 USB analyzer on Windows XP and higher (32-bit only). This support enables you to:

  • Initiate USB traffic capture directly from DriverWizard.
  • Capture discrete control transfers.

To capture USB traffic:

  1. Select Tools | Start USB Analyzer Capture to start capturing USB data.
  2. To finish the data capture, select Tools | Stop USB Analyzer Capture.
    A dialogue box will appear notifying you where DriverWizard stored the analyzer trace. Click Yes to run Ellisys's Visual Analyzer with the captured data.

To capture a discrete control trasfer check the Trace USB transaction in Ellisys Visual USB check box in the control transfers dialogue box.

Figure 5.11  Ellisys Visual USB Integration

Ellisys Visual USB Integration