commit dc5c4d90d6f093ac899d005d1d9dc8e9b509d71e Author: icex2 Date: Sat Oct 19 00:24:22 2019 +0200 v1.2 release diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dd727b9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build/ +version \ No newline at end of file diff --git a/GNUmakefile b/GNUmakefile new file mode 100644 index 0000000..a25a258 --- /dev/null +++ b/GNUmakefile @@ -0,0 +1,15 @@ +V ?= @ +BUILDDIR ?= build + +gitrev := $(shell git rev-parse HEAD) + +all: +# Generate a version file to identify the build + @echo "$(gitrev)" > version + +.PHONY: clean + +clean: + $(V)rm -rf $(BUILDDIR) + +include Module.mk diff --git a/Module.mk b/Module.mk new file mode 100644 index 0000000..9905bca --- /dev/null +++ b/Module.mk @@ -0,0 +1,31 @@ +# +# Distribution build rules +# + +zipdir := $(BUILDDIR)/zip + +$(zipdir)/: + $(V)mkdir -p $@ + +$(zipdir)/iidx.zip: \ + iidx \ + | $(zipdir)/ + $(V)echo ... $@ + $(V)zip -r $@ $^ + +$(zipdir)/misc.zip: \ + misc \ + | $(zipdir)/ + $(V)echo ... $@ + $(V)zip -r $@ $^ + +$(BUILDDIR)/bemanitools-supplements.zip: \ + $(zipdir)/iidx.zip \ + $(zipdir)/misc.zip \ + README.md \ + version \ + + $(V)echo ... $@ + $(V)zip -j $@ $^ + +all: $(BUILDDIR)/bemanitools-supplements.zip diff --git a/README.md b/README.md new file mode 100644 index 0000000..5a78e27 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Bemanitools supplement +Version: 1.2 + +A collection of various binary files and tools which are required or optional +to run various Bemani arcade games using Bemanitools 5. + +# List of games +* [Beatmania IIDX](iidx/README.md) + +* [Misc for multiple games](misc/README.md) + +# Release history +## v1.2 +* Add ezusb2 Win10 x86/x64 drivers + +## v1.1 +* Add d3d8to9 wrapper library + +## v1.0 +* Initial release with IIDX IO drivers, IIDX IO firmwares, video codec and +RtEffects stub diff --git a/iidx/README.md b/iidx/README.md new file mode 100644 index 0000000..749d31b --- /dev/null +++ b/iidx/README.md @@ -0,0 +1,4 @@ +# Beatmania IIDX supplements +* [ezusb](ezusb/README.md): Drivers and firmware binaries for a real ezusb (C02) IO board. +* [ezusb2](ezusb2/README.md): Drivers and firmware binaries for a real ezusb FX2 (IO2) IO board. +* [misc](misc/README.md): Various stuff. Check readme. diff --git a/iidx/ezusb/README.md b/iidx/ezusb/README.md new file mode 100644 index 0000000..f1fab30 --- /dev/null +++ b/iidx/ezusb/README.md @@ -0,0 +1,3 @@ +# Ezusb (legacy), aka C02 IO +* [driver](driver/README.md): Drivers for various platforms. +* [firmware](firmware/README.md): Firmware binary blobs required by the games. diff --git a/iidx/ezusb/driver/README.md b/iidx/ezusb/driver/README.md new file mode 100644 index 0000000..cb7077b --- /dev/null +++ b/iidx/ezusb/driver/README.md @@ -0,0 +1,75 @@ +# Drivers for Ezusb (legacy), aka C02 IO +Currently, this package offers drivers for the following platforms: +* Windows XP: x86 +* Windows 7: x86, x64 +* Windows 10: x86, x64 + +Furthermore, the source code of the driver is included (see *src* folder). The +Windows XP driver is the original driver people have used in the past already. +All other platforms are compiled from source and were not supported initially. + +## Installing on Windows XP +* Plug in the device and Windows should recognize it automatically +* Do not connect to Windows Update to search for software if prompted +* "Install from a list or specific location (Advanced)" -> Next +* "Don't search. I will choose the driver to install" -> Next +* "Have Disk..." -> "Browse..." -> Select the xp/x86 subfolder containing the +*sys* and *inf* file +* Select the device "Cypress EZ-USB (2235) - EEPROM missing" from the list -> +Next +* That should be it + +## Installing on Windows 7, 10 +### IMPORATNT: Unsigned drivers +The driver is not signed, so you have to allow loading of unsigned drivers. One +method to do is this: +run in cmd.exe as Administrator: +``` +bcdedit -set loadoptions DISABLE_INTEGRITY_CHECKS +bcdedit -set TESTSIGNING ON +``` +Reboot. + +If you don't allow unsigned drivers to load, you can install the driver but +in the device manager, the device will always show up as "not working" and +cannot be used by the game or any of the ezusb tools of BT5. + +### Install +* Plug in the device and Windows should recognize it automatically +* "Browse my computer for driver software" -> Next +* "Let me pick from a list of device drivers on my computer" -> Next +* "Have Disk..." -> "Browse..." -> Select your target platform, e.g. Win 7, and +architecture, e.g. x64 +* Select the device "Cypress EZ-USB (2235) - EEPROM missing" from the list -> +Next +* That should be it + +## Flashing of firmware +In order to use the hardware with the game, you have to flash the correct +firmware to the device. Follow the (firmware guide)[../firmware/README.md] for +this. + +## Testing +Instead of using the games, use one of the tools included with BT5 to test and +debug issues as it will error on more fine granular level. Furthermore, you +can also check the source code for details and to track down any unknown issues. + +## Development and Compiling +You need a recent version of Visual Studio, e.g. 2019, to open the source located +in *src*. + +To change the target Windows version, right-click on the project -> Properties -> +Driver Settings -> General -> Target OS Platform and change that to your target +platform you want to compile for, e.g. Windows 7. Make sure the project +platform, e.g. x86, x64, as well as the build type, e.g. debug, release, is set +correctly. + +### Debugging +You can setup a remote kernel debugger but that's quite a pain in the ass and +might not even be necessary if you can work with printf, aka DbgPrint for +kernel modules. Compile the project in Debug mode and you enable a macro +that will insert the debug prints available in the module. + +Use Microsoft's "DebugView" Tool, run it as administrator on the target machine +and enable kernel debugging. Once you plug-in the ezusb board, you should see +log messages of the ezusb.sys module. diff --git a/iidx/ezusb/driver/src/Version.h b/iidx/ezusb/driver/src/Version.h new file mode 100755 index 0000000..b7ac2e8 --- /dev/null +++ b/iidx/ezusb/driver/src/Version.h @@ -0,0 +1,32 @@ +#ifndef VERSION_INCLUDED +#define VERSION_INCLUDED + +////////////////////////////////////////////////////////////////////// +// +// File: version.h +// $Archive: /USB/Drivers/ezusbdrv/Version.h $ +// +// Purpose: +// Version information header file for EZ-USB General Purpose Driver +// +// Environment: +// kernel mode +// +// $Author: Tpm $ +// +// +// Copyright (c) 1997 Anchor Chips, Inc. May not be reproduced without +// permission. See the license agreement for more details. +// +////////////////////////////////////////////////////////////////////// + +// +// Make sure to keep these in sync with the version +// information in ezusbsys.rc +// +#define EZUSB_MAJOR_VERSION 01 +#define EZUSB_MINOR_VERSION 01 +#define EZUSB_BUILD_VERSION 0000 + +#endif // VERSION_INCLUDED + diff --git a/iidx/ezusb/driver/src/ezusbsys.c b/iidx/ezusb/driver/src/ezusbsys.c new file mode 100755 index 0000000..266860a --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.c @@ -0,0 +1,4894 @@ +////////////////////////////////////////////////////////////////////// +// +// File: ezusbsys.c +// $Archive: /USB/Drivers/ezusbdrv/ezusbsys.c $ +// +// Purpose: +// General purpose USB device driver +// +// Environment: +// kernel mode +// +// $Author: Mdn $ +// +// $History: ezusbsys.c $ +// +// ***************** Version 6 ***************** +// User: Mdn Date: 9/17/01 Time: 10:54a +// Updated in $/USB/Drivers/ezusbdrv +// Fixed memory leak bug in ISO streaming code. Was setting the +// PendingTransfers variable to the wrong value and not properly freeing +// after stopping the ISO stream. +// +// ***************** Version 5 ***************** +// User: Mdn Date: 10/06/00 Time: 10:08a +// Updated in $/USB/Drivers/ezusbdrv +// Added IOCTL_EZUSB_SET_FEATURE +// +// ***************** Version 4 ***************** +// User: Mdn Date: 8/17/00 Time: 9:46a +// Updated in $/USB/Drivers/ezusbdrv +// added a generic get descriptor function. +// +// ***************** Version 3 ***************** +// User: Mdn Date: 8/04/00 Time: 11:41a +// Updated in $/USB/Drivers/ezmon +// added support for monitor download to FX2 +// +// ***************** Version 2 ***************** +// User: Mdn Date: 7/21/00 Time: 4:27p +// Updated in $/USB/Drivers/ezusbdrv +// Added a Started flag to the device extension. This flag gets set after +// the device has successfully Started. It is used to prevent a potential +// race condition where an application could get a handle (with +// CreateFile()) before the device is completely enumerated. +// +// ***************** Version 1 ***************** +// User: Tpm Date: 6/09/00 Time: 6:32p +// Created in $/USB/Drivers/ezusbdrv +// +// ***************** Version 42 ***************** +// User: Mdn Date: 5/05/00 Time: 10:24a +// Updated in $/EzUsb/Drivers/ezusbdrv +// comments +// +// ***************** Version 41 ***************** +// User: Mdn Date: 4/18/00 Time: 2:45p +// Updated in $/EzUsb/Drivers/ezusbdrv +// fixed memory leak where I wasn't freeing an URB allocated for +// vendor/class requests. +// +// ***************** Version 40 ***************** +// User: Mdn Date: 1/21/00 Time: 10:03a +// Updated in $/EzUsb/Drivers/ezusbdrv +// modified device removal code to send an abort message to all pipes +// before proceding with device removal. This solves the deadlock problem +// that can occur when a transfer is pending and the device receives a +// remove message. Before this change, the driver would block the removal +// indefinitely waiting for all pending transfers to complete. +// +// ***************** Version 39 ***************** +// User: Markm Date: 12/17/99 Time: 11:17a +// Updated in $/EzUsb/Drivers/ezusbdrv +// Removed interface select workaround for an obscure OSR2.1 bug since the +// driver no longer supports Win95. Changed interface select so that it +// selects the first interface/alternate setting in the config descriptor. +// Before, it was hardcoded to select interface 0, AS 0. This should +// allow the driver to handle composite devices more easily, although I +// haven't tested it. +// +// ***************** Version 38 ***************** +// User: Markm Date: 10/06/99 Time: 1:18p +// Updated in $/EzUsb/Drivers/ezusbdrv +// Made changes to Power IRP handling to fix the blue screen on shutdown +// that was occuring under Win2K. Specifically, started using PoXXX() +// calls for handling power IRPs. See code comments in +// Ezusb_DispatchPower(). The PoXXX() calls are not supported by Win95, so +// as of this revision, the driver will no longer work with Windows 95. +// +// ***************** Version 37 ***************** +// User: Markm Date: 5/18/99 Time: 3:37p +// Updated in $/EzUsb/Drivers/ezusbdrv +// +// ***************** Version 36 ***************** +// User: Markm Date: 4/29/99 Time: 9:48a +// Updated in $/EzUsb/Drivers/ezusbdrv +// Fixed IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST so that it correctly returns +// the number of bytes transferred. +// +// ***************** Version 35 ***************** +// User: Markm Date: 4/16/99 Time: 3:39p +// Updated in $/EzUsb/Drivers/ezusbdrv +// more minor changes to get rid of compiler warnings. +// +// ***************** Version 34 ***************** +// User: Markm Date: 4/12/99 Time: 10:26a +// Updated in $/EzUsb/Drivers/ezusbdrv +// minor changes to get rid of compiler warnings. +// +// ***************** Version 33 ***************** +// User: Markm Date: 3/25/99 Time: 4:16p +// Updated in $/EzUsb/Drivers/ezusbdrv +// Fixed a bug in the surprise removal code I just added. I was returning +// from the PnP dispatch function without unlocking the device object. +// +// ***************** Version 32 ***************** +// User: Markm Date: 3/25/99 Time: 2:03p +// Updated in $/EzUsb/Drivers/ezusbdrv +// Added code to allow unplugs (surprise removal) under NT5 without +// notifying the user. +// +// ***************** Version 31 ***************** +// User: Markm Date: 2/23/99 Time: 9:50a +// Updated in $/EzUsb/Drivers/ezusbdrv +// Driver now supports ISO IN streaming with a path to user mode. +// +// ***************** Version 30 ***************** +// User: Markm Date: 2/10/99 Time: 3:31p +// Updated in $/EzUsb/Drivers/ezusbdrv +// removed lots of unused code. Added ring buffer support functions. +// +// ***************** Version 29 ***************** +// User: Markm Date: 2/01/99 Time: 11:57a +// Updated in $/EzUsb/Drivers/ezusbdrv +// Added preliminary support for ISO streaming. +// +// ***************** Version 28 ***************** +// User: Markm Date: 6/12/98 Time: 4:23p +// Updated in $/EzUsb/Drivers/ezusbdrv +// modified pipe reset and abort code so that the driver will work +// correctly under Windows 95 OSR2.1. For Win98, MS changed the size of +// the URB_PIPE_REQUEST structure. They added an extra ulong to it. So, +// a driver compiled with the 98 DDk and run under 95 will send the wrong +// URB size. The solution is to check the USBDI version whenever I do a +// pipe reset or abort. If the USBDI version is pre-win98, I subtract 4 +// from the size of the urb. +// +// ***************** Version 27 ***************** +// User: Markm Date: 4/10/98 Time: 2:52p +// Updated in $/EZUSB/ezmon +// Modified Intel Hex download code to stop the 8051 before downloading to +// internal RAM. +// +// ***************** Version 26 ***************** +// User: Markm Date: 4/09/98 Time: 4:39p +// Updated in $/EZUSB/ezusb driver +// Was not returning status information for ISO transfers. Now it does! +// +// ***************** Version 25 ***************** +// User: Markm Date: 4/09/98 Time: 4:39p +// Updated in $/EZUSB/ezmon +// changes for monitor version of driver +// +// ***************** Version 24 ***************** +// User: Markm Date: 4/09/98 Time: 3:09p +// Updated in $/EZUSB/ezusb driver +// nothing much +// +// ***************** Version 23 ***************** +// User: Markm Date: 4/09/98 Time: 3:00p +// Updated in $/EZUSB/ezusb driver +// Added function to download Intel Hex File records to EZ-USB. For now, +// this function is only used by the conditional build of the driver that +// automatically downloads the Keil monitor. +// +// ***************** Version 22 ***************** +// User: Markm Date: 4/07/98 Time: 1:52p +// Updated in $/EZUSB/ezusb driver +// Added IOCTL_EZUSB_GET_DRIVER_VERSION +// +// ***************** Version 21 ***************** +// User: Markm Date: 4/06/98 Time: 4:26p +// Updated in $/EZUSB/ezusb driver +// Modified ISO transfer code. +// * Transfer descriptors for the ISO transfer are now sent up to the +// caller along with the actual data, so the caller can get the status of +// the transfer on a packet-by-packet basis. +// * Disabled default values. Caller must specify all fields in the ISO +// control structure. +// * Corrected bug where the Stream and Transfer objects weren't being +// freed. +// +// Added some code to measure the latency of a bulk transfer. +// +// ***************** Version 20 ***************** +// User: Markm Date: 3/19/98 Time: 10:13a +// Updated in $/EZUSB/ezusb driver +// Added IOCTL_EZUSB_ANCHOR_DOWNLOAD to support A0 loads to a specific +// memory offset. +// +// ***************** Version 19 ***************** +// User: Markm Date: 2/26/98 Time: 4:04p +// Updated in $/EZUSB/ezusb driver +// Added functions to perform anchor downloads and 8051 reset. +// Added conditionally compiled code to support a special version of the +// driver that will automatically download the Keil 8051 monitor after +// device attachment. +// +// ***************** Version 18 ***************** +// User: Markm Date: 2/25/98 Time: 2:09p +// Updated in $/EZUSB/ezusb driver +// changes for adding version resource to the driver +// +// ***************** Version 17 ***************** +// User: Markm Date: 2/11/98 Time: 9:51a +// Updated in $/EZUSB/ezusb driver +// 1. Added code to handle IRP_MN_CLOSE. +// 2. Now maintain a count of open file handles in the device extension. +// 3. Added workaround in Ezusb_SelectInterfaces() to avoid system hangs +// during device removal under OSR2.1. See comments there. +// +// ***************** Version 16 ***************** +// User: Markm Date: 2/02/98 Time: 3:35p +// Updated in $/EZUSB/ezusb driver +// +// ***************** Version 15 ***************** +// User: Markm Date: 1/27/98 Time: 11:36a +// Updated in $/EZUSB/ezusb driver +// Modified ISO transfer code so that the number of transfer buffers and +// the number of ISO frames per buffer can be specified by the caller. +// +// ***************** Version 14 ***************** +// User: Markm Date: 1/26/98 Time: 10:11a +// Updated in $/EZUSB/ezusb driver +// 1) modified device removal code that was crashing OSR2.1. MS sample +// code says that during device removal, the remove IRP should be passed +// down the stack, and then the deviceobject should be deleted. This +// causes a bugcheck under OSR2.1. Reversing the order of these +// operations fixes the problem. +// 2) hardcoded the initial alternate setting to 2. It was set to 1, but +// this was also causing system crashes under OSR 2.1 during device +// removal. Still under investigation. +// +// ***************** Version 13 ***************** +// User: Markm Date: 1/22/98 Time: 11:50a +// Updated in $/EZUSB/ezusb driver +// Fixed a bug in the device removal handler. It wasn't deleteting the +// symbolic link for the deviceobject after removal. +// Removed lots of unused code. +// Rewrote ISO loopback test code. +// Wrote new ISO read/write functions. +// +// ***************** Version 12 ***************** +// User: Markm Date: 1/18/98 Time: 3:20p +// Updated in $/EZUSB/ezusb driver +// renamed variables. DeviceExtension becomes pdx and DeviceObject +// becomes fdo. +// rewrote handlers for device removal. Cleaned up power management +// dispatch. Added code to maintain a usage count for the device. +// +// ***************** Version 11 ***************** +// User: Markm Date: 1/15/98 Time: 4:36p +// Updated in $/EZUSB/ezusb driver +// Added +// IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER +// IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST +// IOCTL_EZUSB_GET_LAST_ERROR +// preliminary code for handling device removal gracefully. +// +// ***************** Version 10 ***************** +// User: Markm Date: 1/14/98 Time: 10:29a +// Updated in $/EZUSB/ezusb driver +// Cleanup. +// New functions for handling bulk transfers. +// +// ***************** Version 9 ***************** +// User: Markm Date: 1/08/98 Time: 5:14p +// Updated in $/EZUSB/ezusb driver +// major changes to PnP IRP handling. lots of reformatting. +// +// ***************** Version 8 ***************** +// User: Markm Date: 1/02/98 Time: 1:41p +// Updated in $/EZUSB/ezusb driver +// Added support for setting the interface, preliminary code for naming +// pipes, get string descriptor +// +// ***************** Version 7 ***************** +// User: Markm Date: 11/18/97 Time: 4:40p +// Updated in $/EZUSB/ezusb driver +// Added abort pipe IOCTL +// Added function to dump a buffer to the debuger +// Added experimental file I/O code (from Brad Carpenter) +// +// ***************** Version 6 ***************** +// User: Markm Date: 11/17/97 Time: 9:37a +// Updated in $/EZUSB/ezusb driver +// fixed bug where I set the pipesize +// +// ***************** Version 5 ***************** +// User: Markm Date: 11/14/97 Time: 4:53p +// Updated in $/EZUSB/ezusb driver +// started using USBD_CreateConfigurationRequestEx +// +// ***************** Version 4 ***************** +// User: Markm Date: 11/14/97 Time: 4:31p +// Updated in $/EZUSB/ezusb driver +// added code to experiment wth different methods of switiching +// interfaces. +// +// ***************** Version 3 ***************** +// User: Markm Date: 11/07/97 Time: 1:23p +// Updated in $/EZUSB/ezusb driver +// added sourcesafe keywords +// +// Copyright (c) 1997 Anchor Chips, Inc. May not be reproduced without +// permission. See the license agreement for more details. +// +////////////////////////////////////////////////////////////////////// + +// #define DRIVER +// +// Include files needed for WDM driver support +// +#include +#include "stdarg.h" +#include "stdio.h" + +// +// Include files needed for USB support +// +#include "usbdi.h" +#include "usbdlib.h" + +// +// Include file for the Ezusb Device +// +#include "ezusbsys.h" + +// +// incude file containing driver version +// +#include "version.h" + +#ifdef DOWNLOAD_KEIL_MONITOR + +extern INTEL_HEX_RECORD mon_ext_sio1_ezusb[]; +extern INTEL_HEX_RECORD mon_ext_sio1_fx2[]; +extern INTEL_HEX_RECORD loader[]; + +#endif // ifdef DOWNLOAD_KEIL_MONITOR + + +void +DumpBuffer(PVOID pvBuffer, ULONG length); + +NTSTATUS +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath + ) +/*++ + +Routine Description: + Installable driver initialization entry point. + This is where the driver is called when the driver is being loaded + by the I/O system. This entry point is called directly by the I/O system. + +Arguments: + DriverObject - pointer to the driver object + RegistryPath - pointer to a unicode string representing the path + to driver-specific key in the registry + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PDEVICE_OBJECT deviceObject = NULL; + + Ezusb_KdPrint (("entering (Ezusb) DriverEntry (Build: %s/%s\n",__DATE__,__TIME__)); + + // + // Create dispatch points for the various events handled by this + // driver. For example, device I/O control calls (e.g., when a Win32 + // application calls the DeviceIoControl function) will be dispatched to + // routine specified below in the IRP_MJ_DEVICE_CONTROL case. + // + DriverObject->MajorFunction[IRP_MJ_CREATE] = Ezusb_Create; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = Ezusb_Close; + DriverObject->DriverUnload = Ezusb_Unload; + + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = Ezusb_ProcessIOCTL; + + DriverObject->MajorFunction[IRP_MJ_PNP] = Ezusb_DispatchPnp; + DriverObject->MajorFunction[IRP_MJ_POWER] = Ezusb_DispatchPower; + DriverObject->DriverExtension->AddDevice = Ezusb_PnPAddDevice; + + Ezusb_KdPrint (("exiting (Ezusb) DriverEntry (%x)\n", ntStatus)); + + return ntStatus; +} + +NTSTATUS +Ezusb_DefaultPnpHandler( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +{ + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; + + IoSkipCurrentIrpStackLocation(Irp); + return IoCallDriver(pdx->StackDeviceObject, Irp); +} + +/////////////////////////////////////////////////////////////////////////////// +// @func Handle completion of a request by a lower-level driver +// @parm Functional device object +// @parm I/O request which has completed +// @parm Context argument supplied to IoSetCompletionRoutine, namely address of +// KEVENT object on which ForwardAndWait is waiting +// @comm This is the completion routine used for requests forwarded by ForwardAndWait. It +// sets the event object and thereby awakens ForwardAndWait. +// @comm Note that it's *not* necessary for this particular completion routine to test +// the PendingReturned flag in the IRP and then call IoMarkIrpPending. You do that in many +// completion routines because the dispatch routine can't know soon enough that the +// lower layer has returned STATUS_PENDING. In our case, we're never going to pass a +// STATUS_PENDING back up the driver chain, so we don't need to worry about this. + +NTSTATUS +OnRequestComplete( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp, + IN PKEVENT pev + ) +/*++ + +Routine Description: + Handle completion of a request by a lower-level driver + +Arguments: + DriverObject - Functional device object + Irp - I/O request which has completed + pev - Context argument supplied to IoSetCompletionRoutine, namely address of + KEVENT object on which ForwardAndWait is waiting + +Return Value: + STATUS_MORE_PROCESSING_REQUIRED +--*/ +{ + KeSetEvent(pev, 0, FALSE); + return STATUS_MORE_PROCESSING_REQUIRED; +} + +NTSTATUS +ForwardAndWait( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ +Routine Description: + Forward request to lower level and await completion + + The only purpose of this routine in this particular driver is to pass down + IRP_MN_START_DEVICE requests and wait for the PDO to handle them. + + The processor must be at PASSIVE IRQL because this function initializes + and waits for non-zero time on a kernel event object. + +Arguments: + fdo - pointer to a device object + Irp - pointer to an I/O Request Packet + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise +--*/ +{ + KEVENT event; + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; + NTSTATUS ntStatus; + + ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); + + // + // Initialize a kernel event object to use in waiting for the lower-level + // driver to finish processing the object. + // + KeInitializeEvent(&event, NotificationEvent, FALSE); + + IoCopyCurrentIrpStackLocationToNext(Irp); + IoSetCompletionRoutine(Irp, (PIO_COMPLETION_ROUTINE) OnRequestComplete, + (PVOID) &event, TRUE, TRUE, TRUE); + + ntStatus = IoCallDriver(pdx->StackDeviceObject, Irp); + + if (ntStatus == STATUS_PENDING) + { + KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); + ntStatus = Irp->IoStatus.Status; + } + + return ntStatus; +} + +NTSTATUS +CompleteRequest( + IN PIRP Irp, + IN NTSTATUS status, + IN ULONG info + ) +/*++ +Routine Description: + Mark I/O request complete + +Arguments: + Irp - I/O request in question + status - Standard status code + info Additional information related to status code + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise +--*/ +{ + Irp->IoStatus.Status = status; + Irp->IoStatus.Information = info; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return status; +} + +NTSTATUS +Ezusb_DispatchPnp( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ +Routine Description: + Process Plug and Play IRPs sent to this device. + +Arguments: + fdo - pointer to a device object + Irp - pointer to an I/O Request Packet + +Return Value: + NTSTATUS +--*/ +{ + PIO_STACK_LOCATION irpStack; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + ULONG fcn; + NTSTATUS ntStatus; + + Ezusb_KdPrint (("Enter Ezusb_DispatchPnp\n")); + + if (!LockDevice(fdo)) + return CompleteRequest(Irp, STATUS_DELETE_PENDING, 0); + + // + // Get a pointer to the current location in the Irp. This is where + // the function codes and parameters are located. + // + irpStack = IoGetCurrentIrpStackLocation (Irp); + + ASSERT(irpStack->MajorFunction == IRP_MJ_PNP); + + fcn = irpStack->MinorFunction; + + switch (fcn) + { + case IRP_MN_START_DEVICE: + + Ezusb_KdPrint (("IRP_MN_START_DEVICE\n")); + + ntStatus = Ezusb_HandleStartDevice(fdo,Irp); + + if (ntStatus == STATUS_SUCCESS) + { + pdx->Started = TRUE; + } + + break; //IRP_MN_START_DEVICE + + case IRP_MN_STOP_DEVICE: + + Ezusb_KdPrint (("IRP_MN_STOP_DEVICE\n")); + + // + // first pass the request down the stack + // + Ezusb_DefaultPnpHandler(fdo,Irp); + + ntStatus = Ezusb_StopDevice(fdo); + + break; //IRP_MN_STOP_DEVICE + + case IRP_MN_REMOVE_DEVICE: + + Ezusb_KdPrint (("IRP_MN_REMOVE_DEVICE\n")) + + ntStatus = Ezusb_HandleRemoveDevice(fdo,Irp); + + break; //IRP_MN_REMOVE_DEVICE + + case IRP_MN_QUERY_CAPABILITIES: + { + // + // This code swiped from Walter Oney. Please buy his book!! + // + + PDEVICE_CAPABILITIES pdc = irpStack->Parameters.DeviceCapabilities.Capabilities; + + Ezusb_KdPrint (("IRP_MN_QUERY_CAPABILITIES\n")) + + // Check to be sure we know how to handle this version of the capabilities structure + + if (pdc->Version < 1) + { + ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp); + break; + } + + ntStatus = ForwardAndWait(fdo, Irp); + if (NT_SUCCESS(ntStatus)) + { // IRP succeeded + pdc = irpStack->Parameters.DeviceCapabilities.Capabilities; + // setting this field prevents NT5 from notifying the user when the + // device is removed. + pdc->SurpriseRemovalOK = TRUE; + } // IRP succeeded + + ntStatus = CompleteRequest(Irp, ntStatus, Irp->IoStatus.Information); + } + break; //IRP_MN_QUERY_CAPABILITIES + + + // + // All other PNP IRP's are just passed down the stack by the default handler + // + default: + Ezusb_KdPrint (("Passing down unhandled PnP IOCTL 0x%x\n", fcn)); + ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp); + + } // switch MinorFunction + + if (fcn != IRP_MN_REMOVE_DEVICE) + UnlockDevice(fdo); + + Ezusb_KdPrint (("Exit Ezusb_DispatchPnp %x\n", ntStatus)); + return ntStatus; + +}//Ezusb_Dispatch + + +NTSTATUS +Ezusb_DispatchPower( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ +Routine Description: + Process the IRPs sent to this device. + +Arguments: + fdo - pointer to a device object + Irp - pointer to an I/O Request Packet + +Return Value: + NTSTATUS +--*/ +{ + PIO_STACK_LOCATION irpStack, nextStack; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + NTSTATUS ntStatus; + + Ezusb_KdPrint (("Enter Ezusb_DispatchPower\n")); + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + // + // Get a pointer to the current location in the Irp. This is where + // the function codes and parameters are located. + // + irpStack = IoGetCurrentIrpStackLocation (Irp); + + + + Ezusb_KdPrint (("IRP_MJ_POWER MIN=0x%x Type=0x%x State=0x%x\n",irpStack->MinorFunction, + irpStack->Parameters.Power.Type, + irpStack->Parameters.Power.State.DeviceState)); + + switch (irpStack->MinorFunction) + { + case IRP_MN_SET_POWER: + + switch (irpStack->Parameters.Power.Type) + { + case SystemPowerState: + + break; //SystemPowerState + + case DevicePowerState: + switch (irpStack->Parameters.Power.State.DeviceState) + { + case PowerDeviceD3: + Ezusb_KdPrint (("IRP_MN_SET_D3\n")); + break; + case PowerDeviceD2: + Ezusb_KdPrint (("IRP_MN_SET_D2\n")); + break; + case PowerDeviceD1: + Ezusb_KdPrint (("IRP_MN_SET_D1\n")); + break; + case PowerDeviceD0: + Ezusb_KdPrint (("IRP_MN_SET_D0\n")); + break; + } // switch on Power.State.DeviceState + + break; //DevicePowerState + + }// switch on Power.Type + + break; //IRP_MN_SET_POWER + + case IRP_MN_QUERY_POWER: + + // Look at what type of power query this is + switch (irpStack->Parameters.Power.Type) + { + case SystemPowerState: + + break; //SystemPowerState + + case DevicePowerState: + switch (irpStack->Parameters.Power.State.DeviceState) + { + case PowerDeviceD2: + Ezusb_KdPrint (("IRP_MN_QUERY_D2\n")); + break; + case PowerDeviceD1: + Ezusb_KdPrint (("IRP_MN_QUERY_D1\n")); + break; + case PowerDeviceD3: + Ezusb_KdPrint (("IRP_MN_QUERY_D3\n")); + break; + } //switch on Power.State.DeviceState + + break; //DevicePowerState + + }//switch on Power.Type + + break; //IRP_MN_QUERY_POWER + + default: + // A PnP Minor Function was not handled + Ezusb_KdPrint (("Power IOCTL not handled\n")); + + } /* switch MinorFunction*/ + + + nextStack = IoGetNextIrpStackLocation(Irp); + ASSERT(nextStack != NULL); + RtlCopyMemory(nextStack, irpStack, sizeof(IO_STACK_LOCATION)); + + // + // All PNP_POWER messages get passed to the StackDeviceObject that + // we were given in PnPAddDevice. + // + // This stack device object is managed by the USB software subsystem, + // and so this IRP must be propagated to the owning device driver for + // that stack device object, so that driver in turn can perform any + // device state management (e.g., remove its device object, etc.). + // + Ezusb_KdPrint (("Passing Power Irp down\n")); + + // + // Notes on passing power IRPs down: Using IoCallDriver() to pass + // down power IRPs worked until Windows 2000. Using this method + // with Win2K causes a blue screen at system shutdown. Because of this, + // I am modifying the driver to use the more correct PoXXX() functions + // to handle power IRPs. Unfortunately, the PoXXX() calls weren't + // added until the kernel until after the release of Windows 95 OSR2. + // So, a driver using these calls will not load on a Windows 95 system. + // If you need to use this driver under Windows 95. then you must + // #define WIN95. + // + +#ifdef WIN95 + ntStatus = IoCallDriver(pdx->StackDeviceObject, Irp); +#else + PoStartNextPowerIrp(Irp); + ntStatus = PoCallDriver(pdx->StackDeviceObject,Irp); +#endif + + // + // If lower layer driver marked the Irp as pending then reflect that by + // calling IoMarkIrpPending. + // + if (ntStatus == STATUS_PENDING) + { + IoMarkIrpPending(Irp); + Ezusb_KdPrint (("Power Irp came back with STATUS_PENDING (%x)\n", ntStatus)); + } + else + { + Ezusb_KdPrint (("Power Irp came back, status = %x\n", ntStatus)); + } // if ntStatus is PENDING + + goto Ezusb_Dispatch_Done; + +Ezusb_Dispatch_Done: + + Ezusb_KdPrint (("Exit Ezusb_DispatchPower %x\n", ntStatus)); + return ntStatus; + +}//Ezusb_DispatchPower + + +VOID +Ezusb_Unload( + IN PDRIVER_OBJECT DriverObject + ) +/*++ +Routine Description: + Free all the allocated resources, etc. + TODO: This is a placeholder for driver writer to add code on unload + +Arguments: + DriverObject - pointer to a driver object + +Return Value: + None +--*/ +{ + Ezusb_KdPrint (("enter Ezusb_Unload\n")); + /* + // TODO: Free any global resources allocated in DriverEntry + */ + Ezusb_KdPrint (("exit Ezusb_Unload\n")); +} + +NTSTATUS +Ezusb_HandleRemoveDevice( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +{ + NTSTATUS ntStatus; + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; + ULONG i; + + // set the removing flag to prevent any new I/O's + pdx->removing = TRUE; + + // brute force - send an abort pipe message to all pipes to cancel any + // pending transfers. this should solve the problem of the driver blocking + // on a REMOVE message because there is a pending transfer. + for (i = 0; i < pdx->Interface->NumberOfPipes; i++) + { + Ezusb_AbortPipe(fdo,(USBD_PIPE_HANDLE) pdx->Interface->Pipes[i].PipeHandle); + } + + UnlockDevice(fdo); // once for LockDevice at start of dispatch + UnlockDevice(fdo); // once for initialization during AddDevice + KeWaitForSingleObject(&pdx->evRemove, Executive, KernelMode, FALSE, NULL); + + Ezusb_RemoveDevice(fdo); + + ntStatus = Ezusb_DefaultPnpHandler(fdo, Irp); + + return ntStatus; // lower-level completed IoStatus already + +} + + +NTSTATUS +Ezusb_HandleStartDevice( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +{ + NTSTATUS ntStatus; + + // + // First let all lower-level drivers handle this request. + // + ntStatus = ForwardAndWait(fdo, Irp); + if (!NT_SUCCESS(ntStatus)) + return CompleteRequest(Irp, ntStatus, Irp->IoStatus.Information); + + // + // now do whatever we need to do to start the device + // + ntStatus = Ezusb_StartDevice(fdo); + + return CompleteRequest(Irp, ntStatus, 0); +} + +NTSTATUS +Ezusb_StartDevice( + IN PDEVICE_OBJECT fdo + ) +/*++ + +Routine Description: + Initializes a given instance of the Ezusb Device on the USB. + + Arguments: + fdo - pointer to the device object for this instance of a + Ezusb Device + +Return Value: + NT status code +--*/ +{ + PDEVICE_EXTENSION pdx; + NTSTATUS ntStatus; + PUSB_DEVICE_DESCRIPTOR deviceDescriptor = NULL; + PURB urb; + ULONG siz; + + Ezusb_KdPrint (("enter Ezusb_StartDevice\n")); + + pdx = fdo->DeviceExtension; + pdx->NeedCleanup = TRUE; + + /* + // Get some memory from then non paged pool (fixed, locked system memory) + // for use by the USB Request Block (urb) for the specific USB Request we + // will be performing below (a USB device request). + */ + urb = ExAllocatePool( NonPagedPool, + sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); + + if (urb) { + + siz = sizeof(USB_DEVICE_DESCRIPTOR); + + // Get some non paged memory for the device descriptor contents + deviceDescriptor = ExAllocatePool(NonPagedPool, + siz); + + if (deviceDescriptor) { + + // Use a macro in the standard USB header files to build the URB + UsbBuildGetDescriptorRequest(urb, + (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), + USB_DEVICE_DESCRIPTOR_TYPE, + 0, + 0, + deviceDescriptor, + NULL, + siz, + NULL); + + // Get the device descriptor + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // Dump out the descriptor info to the debugger + if (NT_SUCCESS(ntStatus)) { + Ezusb_KdPrint (("Device Descriptor = %x, len %x\n", + deviceDescriptor, + urb->UrbControlDescriptorRequest.TransferBufferLength)); + + Ezusb_KdPrint (("Ezusb Device Descriptor:\n")); + Ezusb_KdPrint (("-------------------------\n")); + Ezusb_KdPrint (("bLength %d\n", deviceDescriptor->bLength)); + Ezusb_KdPrint (("bDescriptorType 0x%x\n", deviceDescriptor->bDescriptorType)); + Ezusb_KdPrint (("bcdUSB 0x%x\n", deviceDescriptor->bcdUSB)); + Ezusb_KdPrint (("bDeviceClass 0x%x\n", deviceDescriptor->bDeviceClass)); + Ezusb_KdPrint (("bDeviceSubClass 0x%x\n", deviceDescriptor->bDeviceSubClass)); + Ezusb_KdPrint (("bDeviceProtocol 0x%x\n", deviceDescriptor->bDeviceProtocol)); + Ezusb_KdPrint (("bMaxPacketSize0 0x%x\n", deviceDescriptor->bMaxPacketSize0)); + Ezusb_KdPrint (("idVendor 0x%x\n", deviceDescriptor->idVendor)); + Ezusb_KdPrint (("idProduct 0x%x\n", deviceDescriptor->idProduct)); + Ezusb_KdPrint (("bcdDevice 0x%x\n", deviceDescriptor->bcdDevice)); + Ezusb_KdPrint (("iManufacturer 0x%x\n", deviceDescriptor->iManufacturer)); + Ezusb_KdPrint (("iProduct 0x%x\n", deviceDescriptor->iProduct)); + Ezusb_KdPrint (("iSerialNumber 0x%x\n", deviceDescriptor->iSerialNumber)); + Ezusb_KdPrint (("bNumConfigurations 0x%x\n", deviceDescriptor->bNumConfigurations)); + } + } else { + ntStatus = STATUS_NO_MEMORY; + } + + if (NT_SUCCESS(ntStatus)) { + /* + // Put a ptr to the device descriptor in the device extension for easy + // access (like a "cached" copy). We will free this memory when the + // device is removed. See the "Ezusb_RemoveDevice" code. + */ + pdx->DeviceDescriptor = deviceDescriptor; + pdx->Stopped = FALSE; + } else if (deviceDescriptor) { + /* + // If the bus transaction failed, then free up the memory created to hold + // the device descriptor, since the device is probably non-functional + */ + ExFreePool(deviceDescriptor); + pdx->DeviceDescriptor = NULL; + } + + ExFreePool(urb); + + } else { + // Failed getting memory for the Urb + ntStatus = STATUS_NO_MEMORY; + } + + // If the Get_Descriptor call was successful, then configure the device. + if (NT_SUCCESS(ntStatus)) { + ntStatus = Ezusb_ConfigureDevice(fdo); + } + +#ifdef DOWNLOAD_KEIL_MONITOR + // + // download the Keil monitor + // + + // + // First download loader firmware. The loader firmware implements a vendor + // specific command that will allow us to anchor load to external ram + // + Ezusb_8051Reset(fdo,1); + Ezusb_DownloadIntelHex(fdo,loader); + Ezusb_8051Reset(fdo,0); + + // + // Now download the Keil Monitor + // + if (IsFx2(fdo)) + { + Ezusb_KdPrint (("**** Downloading FX2 monitor\n")); + Ezusb_DownloadIntelHex(fdo,mon_ext_sio1_fx2); + } + else + { + Ezusb_KdPrint (("**** Downloading EZ-USB monitor\n")); + Ezusb_DownloadIntelHex(fdo,mon_ext_sio1_ezusb); + } + + Ezusb_8051Reset(fdo,1); + Ezusb_8051Reset(fdo,0); + +#endif // if DOWNLOAD_KEIL_MONITOR + + Ezusb_KdPrint (("exit Ezusb_StartDevice (%x)\n", ntStatus)); + + return ntStatus; +} + + +NTSTATUS +Ezusb_RemoveDevice( + IN PDEVICE_OBJECT fdo + ) +/*++ + +Routine Description: + Removes a given instance of a Ezusb Device device on the USB. + +Arguments: + fdo - pointer to the device object for this instance of a Ezusb Device + +Return Value: + NT status code + +--*/ +{ + PDEVICE_EXTENSION pdx; + NTSTATUS ntStatus = STATUS_SUCCESS; + + Ezusb_KdPrint (("enter Ezusb_RemoveDevice\n")); + + pdx = fdo->DeviceExtension; + + if (pdx->DeviceDescriptor) + { + ExFreePool(pdx->DeviceDescriptor); + } + + // + // Free up any interface structures in our device extension + // + if (pdx->Interface != NULL) + { + ExFreePool(pdx->Interface); + } + + // + // remove the device object's symbolic link + // + if (pdx->NeedCleanup) + { + UNICODE_STRING deviceLinkUnicodeString; + + pdx->NeedCleanup = FALSE; + + RtlInitUnicodeString (&deviceLinkUnicodeString, + pdx->DeviceLinkNameBuffer); + + IoDeleteSymbolicLink(&deviceLinkUnicodeString); + } + + IoDetachDevice(pdx->StackDeviceObject); + + IoDeleteDevice (fdo); + + Ezusb_KdPrint (("exit Ezusb_RemoveDevice (%x)\n", ntStatus)); + + return ntStatus; +} + + +NTSTATUS +Ezusb_StopDevice( + IN PDEVICE_OBJECT fdo + ) +/*++ +Routine Description: + Stops a given instance of a Ezusb Device device on USB. + +Arguments: + fdo - pointer to the device object for this instance of a Ezusb Device + +Return Value: + NT status code + + --*/ +{ + PDEVICE_EXTENSION pdx; + NTSTATUS ntStatus = STATUS_SUCCESS; + PURB urb; + ULONG siz; + + Ezusb_KdPrint (("enter Ezusb_StopDevice\n")); + + pdx = fdo->DeviceExtension; + + // + // Send the select configuration urb with a NULL pointer for the configuration + // handle, this closes the configuration and puts the device in the 'unconfigured' + // state. + // + + siz = sizeof(struct _URB_SELECT_CONFIGURATION); + + urb = ExAllocatePool(NonPagedPool, + siz); + + if (urb) + { + NTSTATUS status; + + UsbBuildSelectConfigurationRequest(urb, + (USHORT) siz, + NULL); + + status = Ezusb_CallUSBD(fdo, urb); + + Ezusb_KdPrint (("Device Configuration Closed status = %x usb status = %x.\n", + status, urb->UrbHeader.Status)); + + ExFreePool(urb); + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + Ezusb_KdPrint (("exit Ezusb_StopDevice (%x)\n", ntStatus)); + + return ntStatus; +} + +NTSTATUS +Ezusb_PnPAddDevice( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject + ) +/*++ +Routine Description: + This routine is called to create a new instance of the device + +Arguments: + DriverObject - pointer to the driver object for this instance of Ezusb + PhysicalDeviceObject - pointer to a device object created by the bus + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PDEVICE_OBJECT deviceObject = NULL; + PDEVICE_EXTENSION pdx; + int instance; + + Ezusb_KdPrint(("enter Ezusb_PnPAddDevice\n")); + +#define MAX_EZUSB_DEVICES 8 + + // + // create our functional device object (FDO). This driver supports multiple ezusb devices. + // This loop will look for an available instance number. Keep incrementing the instance + // until a call to Ezusb_CreateDeviceObject succeeds. + // + instance = 0; + do + { + ntStatus = Ezusb_CreateDeviceObject(DriverObject, &deviceObject, instance); + instance++; + } while (!NT_SUCCESS(ntStatus) && (instance < MAX_EZUSB_DEVICES)); + + if (NT_SUCCESS(ntStatus)) + { + pdx = deviceObject->DeviceExtension; + + // + // Non plug and play drivers usually create the device object in + // driver entry, and the I/O manager autimatically clears this flag. + // Since we are creating the device object ourselves in response to + // a PnP START_DEVICE IRP, we need to clear this flag ourselves. + // + deviceObject->Flags &= ~DO_DEVICE_INITIALIZING; + + // + // This driver uses direct I/O for read/write requests + // + deviceObject->Flags |= DO_DIRECT_IO; + + deviceObject->Flags |= DO_POWER_PAGABLE; + + // + // + // store away the Physical device Object + // + pdx->PhysicalDeviceObject=PhysicalDeviceObject; + + // + // Attach to the StackDeviceObject. This is the device object that what we + // use to send Irps and Urbs down the USB software stack + // + pdx->StackDeviceObject = + IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject); + + ASSERT (pdx->StackDeviceObject != NULL); + + pdx->LastFailedUrbStatus = 0; + + pdx->usage = 1; // locked until RemoveDevice + KeInitializeEvent(&pdx->evRemove, + NotificationEvent, + FALSE); // set when use count drops to zero + } + + Ezusb_KdPrint(("exit Ezusb_PnPAddDevice (%x)\n", ntStatus)); + + return ntStatus; +} + + +NTSTATUS +Ezusb_CreateDeviceObject( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT *DeviceObject, + LONG Instance + ) +/*++ + +Routine Description: + Creates a Functional DeviceObject + +Arguments: + DriverObject - pointer to the driver object for device + DeviceObject - pointer to DeviceObject pointer to return + created device object. + Instance - instnace of the device create. + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise +--*/ +{ + NTSTATUS ntStatus; + WCHAR deviceLinkBuffer[] = L"\\DosDevices\\Ezusb-0"; + UNICODE_STRING deviceLinkUnicodeString; + WCHAR deviceNameBuffer[] = L"\\Device\\Ezusb-0"; + UNICODE_STRING deviceNameUnicodeString; + PDEVICE_EXTENSION pdx; + STRING deviceName; + + Ezusb_KdPrint(("enter Ezusb_CreateDeviceObject instance = %d\n", Instance)); + + // + // fix up device names based on Instance + // + deviceLinkBuffer[18] = (USHORT) ('0' + Instance); + deviceNameBuffer[14] = (USHORT) ('0' + Instance); + + Ezusb_KdPrint(("Create Device name (%ws)\n", deviceNameBuffer)); + + RtlInitUnicodeString (&deviceNameUnicodeString, + deviceNameBuffer); + + // + //Print out the unicode string + //NOTE: We must first convert the string to Unicode due to a bug in the Debugger that does not allow + // Unicode Strings to be printed to the debug device. + // + deviceName.Buffer = NULL; + + ntStatus = RtlUnicodeStringToAnsiString (&deviceName, + &deviceNameUnicodeString, + TRUE); + + + if (NT_SUCCESS(ntStatus)) + { + Ezusb_KdPrint(("Create Device Name (%s)\n", deviceName.Buffer)); + RtlFreeAnsiString (&deviceName); + } + else + { + Ezusb_KdPrint(("Unicode to Ansi str failed w/ ntStatus: 0x%x\n",ntStatus)); + } + + ntStatus = IoCreateDevice (DriverObject, + sizeof (DEVICE_EXTENSION), + &deviceNameUnicodeString, + FILE_DEVICE_UNKNOWN, + 0, + FALSE, + DeviceObject); + + + if (NT_SUCCESS(ntStatus)) + { + + // Initialize our device extension + pdx = (PDEVICE_EXTENSION) ((*DeviceObject)->DeviceExtension); + + RtlCopyMemory(pdx->DeviceLinkNameBuffer, + deviceLinkBuffer, + sizeof(deviceLinkBuffer)); + + pdx->OpenHandles = 0; + pdx->ConfigurationHandle = NULL; + pdx->DeviceDescriptor = NULL; + pdx->NeedCleanup = FALSE; + pdx->DataRingBuffer = NULL; + pdx->DescriptorRingBuffer = NULL; + pdx->Started = FALSE; + + // Initialize our interface + pdx->Interface = NULL; + + RtlInitUnicodeString (&deviceLinkUnicodeString, + deviceLinkBuffer); + + Ezusb_KdPrint(("Create DosDevice name (%ws)\n", deviceLinkBuffer)); + + ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString, + &deviceNameUnicodeString); + + } + + Ezusb_KdPrint(("exit Ezusb_CreateDeviceObject (%x)\n", ntStatus)); + + return ntStatus; +} + +NTSTATUS +Ezusb_CallUSBD( + IN PDEVICE_OBJECT fdo, + IN PURB Urb + ) +/*++ + +Routine Description: + Passes a Usb Request Block (URB) to the USB class driver (USBD) + + Note that we create our own IRP here and use it to send the request to + the USB software subsystem. This means that this routine is essentially + independent of the IRP that caused this driver to be called in the first + place. The IRP for this transfer is created, used, and then destroyed + in this routine. + + However, note that this routine uses the Usb Request Block (urb) passed + in by the caller as the request block for the USB software stack. + + Implementation of this routine may be changed depending on the specific + requirements of your driver. For example, while this routine issues a + synchronous request to the USB stack, you may wish to implement this as an + asynchronous request in which you set an IoCompletionRoutine to be called + when the request is complete. + +Arguments: + fdo - pointer to the device object for this instance of an Ezusb Device + Urb - pointer to Urb request block + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus, status = STATUS_SUCCESS; + PDEVICE_EXTENSION pdx; + PIRP irp; + KEVENT event; + IO_STATUS_BLOCK ioStatus; + PIO_STACK_LOCATION nextStack; + + Ezusb_KdPrint (("enter Ezusb_CallUSBD\n")); + + pdx = fdo->DeviceExtension; + + // issue a synchronous request (see notes above) + KeInitializeEvent(&event, NotificationEvent, FALSE); + + irp = IoBuildDeviceIoControlRequest( + IOCTL_INTERNAL_USB_SUBMIT_URB, + pdx->StackDeviceObject, + NULL, + 0, + NULL, + 0, + TRUE, /* INTERNAL */ + &event, + &ioStatus); + + // Prepare for calling the USB driver stack + nextStack = IoGetNextIrpStackLocation(irp); + ASSERT(nextStack != NULL); + + // Set up the URB ptr to pass to the USB driver stack + nextStack->Parameters.Others.Argument1 = Urb; + + Ezusb_KdPrint (("Calling USB Driver Stack\n")); + + // + // Call the USB class driver to perform the operation. If the returned status + // is PENDING, wait for the request to complete. + // + ntStatus = IoCallDriver(pdx->StackDeviceObject, + irp); + + Ezusb_KdPrint (("return from IoCallDriver USBD %x\n", ntStatus)); + + if (ntStatus == STATUS_PENDING) + { + Ezusb_KdPrint (("Wait for single object\n")); + + status = KeWaitForSingleObject( + &event, + Suspended, + KernelMode, + FALSE, + NULL); + + Ezusb_KdPrint (("Wait for single object, returned %x\n", status)); + } + else + { + ioStatus.Status = ntStatus; + } + + Ezusb_KdPrint (("URB status = %x status = %x irp status %x\n", + Urb->UrbHeader.Status, status, ioStatus.Status)); + + // + // USBD maps the error code for us. USBD uses error codes in its URB + // structure that are more insightful into USB behavior. In order to + // match the NT Status codes, USBD maps its error codes into more general NT + // error categories so higher level drivers can decipher the error codes + // based on standard NT error code definitions. + // + ntStatus = ioStatus.Status; + + // + // If the URB status was not USBD_STATUS_SUCCESS, we save a copy of the + // URB status in the device extension. After a failure, another IOCTL, + // IOCTL_EZUSB_GET_LAST_ERROR can be used to retrieve the URB status + // for the most recently failed URB. Of course, this status gets + // overwritten by subsequent failures, but it's better than nothing. + // + if (!(USBD_SUCCESS(Urb->UrbHeader.Status))) + pdx->LastFailedUrbStatus = Urb->UrbHeader.Status; + + // + // if ioStatus.Status indicates an error (ie. the IRP failed) then return that. + // If ioStatus.Status indicates success, it is still possible that what we were + // trying to do failed. For example, if the IRP is cancelled, the status returned + // by the I/O manager for the IRP will not indicate an error. In that case, we + // should check the URB status. If it indicates anything other than + // USBD_SUCCESS, then we should return STATUS_UNSUCCESSFUL. + // + if (NT_SUCCESS(ntStatus)) + { + if (!(USBD_SUCCESS(Urb->UrbHeader.Status))) + ntStatus = STATUS_UNSUCCESSFUL; + } + + Ezusb_KdPrint(("exit Ezusb_CallUSBD (%x)\n", ntStatus)); + + return ntStatus; +} + +NTSTATUS +Ezusb_ConfigureDevice( + IN PDEVICE_OBJECT fdo + ) +/*++ +Routine Description: + Configures the USB device via USB-specific device requests and interaction + with the USB software subsystem. + +Arguments: + fdo - pointer to the device object for this instance of the Ezusb Device + +Return Value: + NT status code +--*/ +{ + PDEVICE_EXTENSION pdx; + NTSTATUS ntStatus; + PURB urb = NULL; + ULONG siz; + PUSB_CONFIGURATION_DESCRIPTOR configurationDescriptor = NULL; + + Ezusb_KdPrint (("enter Ezusb_ConfigureDevice\n")); + + pdx = fdo->DeviceExtension; + + // + // Get memory for the USB Request Block (urb). + // + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); + + if (urb != NULL) + { + // + // Set size of the data buffer. Note we add padding to cover hardware faults + // that may cause the device to go past the end of the data buffer + // + siz = sizeof(USB_CONFIGURATION_DESCRIPTOR) + 16; + + // Get the nonpaged pool memory for the data buffer + configurationDescriptor = ExAllocatePool(NonPagedPool, siz); + + if (configurationDescriptor != NULL) { + + UsbBuildGetDescriptorRequest(urb, + (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), + USB_CONFIGURATION_DESCRIPTOR_TYPE, + 0, + 0, + configurationDescriptor, + NULL, + sizeof (USB_CONFIGURATION_DESCRIPTOR),/* Get only the configuration descriptor */ + NULL); + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (NT_SUCCESS(ntStatus)) { + Ezusb_KdPrint (("Configuration Descriptor is at %x, bytes txferred: %d\n\ + Configuration Descriptor Actual Length: %d\n", + configurationDescriptor, + urb->UrbControlDescriptorRequest.TransferBufferLength, + configurationDescriptor->wTotalLength)); + }//if + + } else { + ntStatus = STATUS_NO_MEMORY; + goto Exit_EzusbConfigureDevice; + }//if-else + + // Determine how much data is in the entire configuration descriptor + // and add extra room to protect against accidental overrun + siz = configurationDescriptor->wTotalLength + 16; + + // Free up the data buffer memory just used + ExFreePool(configurationDescriptor); + configurationDescriptor = NULL; + + // Get nonpaged pool memory for the data buffer + configurationDescriptor = ExAllocatePool(NonPagedPool, siz); + + // Now get the entire Configuration Descriptor + if (configurationDescriptor != NULL) { + UsbBuildGetDescriptorRequest(urb, + (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), + USB_CONFIGURATION_DESCRIPTOR_TYPE, + 0, + 0, + configurationDescriptor, + NULL, + siz, // Get all the descriptor data + NULL); + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (NT_SUCCESS(ntStatus)) { + Ezusb_KdPrint (("Entire Configuration Descriptor is at %x, bytes txferred: %d\n", + configurationDescriptor, + urb->UrbControlDescriptorRequest.TransferBufferLength)); + } else { + //Error in getting configuration descriptor + goto Exit_EzusbConfigureDevice; + }//else + + } else { + // Failed getting data buffer (configurationDescriptor) memory + ntStatus = STATUS_NO_MEMORY; + goto Exit_EzusbConfigureDevice; + }//if-else + + } else { + // failed getting urb memory + ntStatus = STATUS_NO_MEMORY; + goto Exit_EzusbConfigureDevice; + }//if-else + + /* + // We have the configuration descriptor for the configuration + // we want. + // + // Now we issue the SelectConfiguration command to get + // the pipes associated with this configuration. + */ + if (configurationDescriptor) { + // Get our pipes + ntStatus = Ezusb_SelectInterfaces(fdo, + configurationDescriptor, + NULL // Device not yet configured + ); + } //if + +Exit_EzusbConfigureDevice: + + // Clean up and exit this routine + if (urb != NULL) { + ExFreePool(urb); // Free urb memory + }//if + + if (configurationDescriptor != NULL) { + ExFreePool(configurationDescriptor);// Free data buffer + }//if + + Ezusb_KdPrint (("exit Ezusb_ConfigureDevice (%x)\n", ntStatus)); + return ntStatus; +}//Ezusb_ConfigureDevice + + +NTSTATUS +Ezusb_SelectInterfaces( + IN PDEVICE_OBJECT fdo, + IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, + IN PUSBD_INTERFACE_INFORMATION Interface + ) +/*++ + +Routine Description: + Initializes an Ezusb Device with multiple interfaces + +Arguments: + fdo - pointer to the device object for this instance of the Ezusb Device + ConfigurationDescriptor - pointer to the USB configuration descriptor containing the interface and endpoint + descriptors. + Interface - pointer to a USBD Interface Information Object + - If this is NULL, then this driver must choose its interface based on driver-specific + criteria, and the driver must also CONFIGURE the device. + - If it is NOT NULL, then the driver has already been given an interface and + the device has already been configured by the parent of this device driver. + +Return Value: + NT status code +--*/ +{ + PDEVICE_EXTENSION pdx; + NTSTATUS ntStatus; + PURB urb; + ULONG j; + UCHAR alternateSetting, MyInterfaceNumber; + PUSBD_INTERFACE_INFORMATION interfaceObject; + USBD_INTERFACE_LIST_ENTRY interfaceList[2]; + + Ezusb_KdPrint (("enter Ezusb_SelectInterfaces\n")); + + pdx = fdo->DeviceExtension; + MyInterfaceNumber = SAMPLE_INTERFACE_NBR; + + // Search the configuration descriptor for the first interface/alternate setting + + interfaceList[0].InterfaceDescriptor = + USBD_ParseConfigurationDescriptorEx(ConfigurationDescriptor, + ConfigurationDescriptor, + -1, // Interface - don't care + -1, // Alternate Setting - don't care + -1, // Class - don't care + -1, // SubClass - don't care + -1); // Protocol - don't care + + ASSERT(interfaceList[0].InterfaceDescriptor != NULL); + + interfaceList[1].InterfaceDescriptor = NULL; + interfaceList[1].Interface = NULL; + + urb = USBD_CreateConfigurationRequestEx(ConfigurationDescriptor,&interfaceList[0]); + + if (!urb) + { + Ezusb_KdPrint ((" USBD_CreateConfigurationRequestEx failed\n")); + } + + DumpBuffer(urb, urb->UrbHeader.Length); + + interfaceObject = (PUSBD_INTERFACE_INFORMATION) (&(urb->UrbSelectConfiguration.Interface)); + + /* + // We set up a default max transfer size for the endpoints. Your driver will + // need to change this to reflect the capabilities of your device's endpoints. + */ + for (j=0; jbNumEndpoints; j++) + interfaceObject->Pipes[j].MaximumTransferSize = (64 * 1024) - 1; + + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + DumpBuffer(urb, urb->UrbHeader.Length); + + if (NT_SUCCESS(ntStatus) && USBD_SUCCESS(urb->UrbHeader.Status)) + { + + // Save the configuration handle for this device + pdx->ConfigurationHandle = + urb->UrbSelectConfiguration.ConfigurationHandle; + + pdx->Interface = ExAllocatePool(NonPagedPool, + interfaceObject->Length); + + // save a copy of the interfaceObject information returned + RtlCopyMemory(pdx->Interface, interfaceObject, interfaceObject->Length); + + // Dump the interfaceObject to the debugger + Ezusb_KdPrint (("---------\n")); + Ezusb_KdPrint (("NumberOfPipes 0x%x\n", pdx->Interface->NumberOfPipes)); + Ezusb_KdPrint (("Length 0x%x\n", pdx->Interface->Length)); + Ezusb_KdPrint (("Alt Setting 0x%x\n", pdx->Interface->AlternateSetting)); + Ezusb_KdPrint (("Interface Number 0x%x\n", pdx->Interface->InterfaceNumber)); + + // Dump the pipe info + for (j=0; jNumberOfPipes; j++) + { + PUSBD_PIPE_INFORMATION pipeInformation; + + pipeInformation = &pdx->Interface->Pipes[j]; + + Ezusb_KdPrint (("---------\n")); + Ezusb_KdPrint (("PipeType 0x%x\n", pipeInformation->PipeType)); + Ezusb_KdPrint (("EndpointAddress 0x%x\n", pipeInformation->EndpointAddress)); + Ezusb_KdPrint (("MaxPacketSize 0x%x\n", pipeInformation->MaximumPacketSize)); + Ezusb_KdPrint (("Interval 0x%x\n", pipeInformation->Interval)); + Ezusb_KdPrint (("Handle 0x%x\n", pipeInformation->PipeHandle)); + Ezusb_KdPrint (("MaximumTransferSize 0x%x\n", pipeInformation->MaximumTransferSize)); + } + + Ezusb_KdPrint (("---------\n")); + } + + + Ezusb_KdPrint (("exit Ezusb_SelectInterfaces (%x)\n", ntStatus)); + + return ntStatus; + +}/* Ezusb_SelectInterfaces */ + + +NTSTATUS +Ezusb_Read_Write( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ +Routine Description: + +Arguments: + +Return Value: + NT status code + STATUS_SUCCESS: Read was done successfully + STATUS_INVALID_PARAMETER_3: The Endpoint Index does not specify an IN pipe + STATUS_NO_MEMORY: Insufficient data memory was supplied to perform the READ + + This routine fills the status code into the Irp + +--*/ +{ + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + NTSTATUS ntStatus; + PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation (Irp); + PBULK_TRANSFER_CONTROL bulkControl = + (PBULK_TRANSFER_CONTROL)Irp->AssociatedIrp.SystemBuffer; + ULONG bufferLength = + irpStack->Parameters.DeviceIoControl.OutputBufferLength; + PURB urb = NULL; + ULONG urbSize = 0; + ULONG transferFlags = 0; + PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL; + PUSBD_PIPE_INFORMATION pipeInfo = NULL; + USBD_PIPE_HANDLE pipeHandle = NULL; + + + Ezusb_KdPrint(("enter Ezusb_Read_Write()\n")); + + // + // verify that the selected pipe is valid, and get a handle to it. If anything + // is wrong, return an error + // + interfaceInfo = pdx->Interface; + + if (!interfaceInfo) + { + Ezusb_KdPrint(("Ezusb_Read_Write() no interface info - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + if (bulkControl->pipeNum > interfaceInfo->NumberOfPipes) + { + Ezusb_KdPrint(("Ezusb_Read_Write() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeInfo = &(interfaceInfo->Pipes[bulkControl->pipeNum]); + + if (!((pipeInfo->PipeType == UsbdPipeTypeBulk) || + (pipeInfo->PipeType == UsbdPipeTypeInterrupt))) + { + Ezusb_KdPrint(("Ezusb_Read_Write() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeHandle = pipeInfo->PipeHandle; + + if (!pipeHandle) + { + Ezusb_KdPrint(("Ezusb_Read_Write() invalid pipe - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + if (bufferLength > pipeInfo->MaximumTransferSize) + { + Ezusb_KdPrint(("Ezusb_Read_Write() invalid transfer size - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + // + // allocate and fill in the Usb request (URB) + // + urbSize = sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER); + + urb = ExAllocatePool(NonPagedPool,urbSize); + + if (!urb) + { + Ezusb_KdPrint(("Ezusb_Read_Write() unable to alloc URB - Exiting\n")); + return STATUS_NO_MEMORY; + } + + + transferFlags = USBD_SHORT_TRANSFER_OK; + + // + // get direction info from the endpoint address + // + if (USB_ENDPOINT_DIRECTION_IN(pipeInfo->EndpointAddress)) + transferFlags |= USBD_TRANSFER_DIRECTION_IN; + + UsbBuildInterruptOrBulkTransferRequest(urb, //ptr to urb + (USHORT) urbSize, //size of urb + pipeHandle, //usbd pipe handle + NULL, //TransferBuffer + Irp->MdlAddress, //mdl + bufferLength, //bufferlength + transferFlags, //flags + NULL); //link + + // + // Call the USB Stack. + // + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // + // If the transfer was successful, report the length of the transfer to the + // caller by setting IoStatus.Information + // + if (NT_SUCCESS(ntStatus)) + { + Irp->IoStatus.Information = urb->UrbBulkOrInterruptTransfer.TransferBufferLength; + Ezusb_KdPrint(("Successfully transfered 0x%x bytes\n",Irp->IoStatus.Information)); + } + + // + // free the URB + // + ExFreePool(urb); + + return ntStatus; +} + + +NTSTATUS +Ezusb_Create( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ +Routine Description: + This is the Entry point for CreateFile calls from user mode apps (apps may open "\\.\Ezusb-x\yyzz" + where yy is the interface number and zz is the endpoint address). + + Here is where you would add code to create symbolic links between endpoints + (i.e., pipes in USB software terminology) and User Mode file names. You are + free to use any convention you wish to create these links, although the above + convention offers a way to identify resources on a device by familiar file and + directory structure nomenclature. + +Arguments: + fdo - pointer to the device object for this instance of the Ezusb device + +Return Value: + NT status code +--*/ +{ + NTSTATUS ntStatus; + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION )fdo->DeviceExtension; + + Ezusb_KdPrint(("Enter Ezusb_Create()\n")); + + if (!pdx->Started) + { + return STATUS_UNSUCCESSFUL; + } + + // increment the open handle counter + pdx->OpenHandles++; + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + // Create all the symbolic links here + ntStatus = Irp->IoStatus.Status; + + IoCompleteRequest (Irp, + IO_NO_INCREMENT + ); + + return ntStatus; + +}//Ezusb_Create + + +NTSTATUS +Ezusb_Close( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ +Routine Description: + Entry point for CloseHandle calls from user mode apps to close handles they have opened + +Arguments: + fdo - pointer to the device object for this instance of the Ezusb device + Irp - pointer to an irp + +Return Value: + NT status code + +--*/ +{ + NTSTATUS ntStatus; + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION )fdo->DeviceExtension; + + Ezusb_KdPrint(("Enter Ezusb_Close()\n")); + + // decrement the open handle counter + pdx->OpenHandles--; + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + ntStatus = Irp->IoStatus.Status; + + IoCompleteRequest (Irp, + IO_NO_INCREMENT + ); + + return ntStatus; + +}//Ezusb_Close + + +NTSTATUS +Ezusb_ProcessIOCTL( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +/*++ + +Routine Description: + This where all the DeviceIoControl codes are handled. You can add more code + here to handle IOCTL codes that are specific to your device driver. + +Arguments: + fdo - pointer to the device object for this instance of the Ezusb device. + +Return Value: + NT status code +--*/ +{ + PIO_STACK_LOCATION irpStack; + PVOID ioBuffer; + ULONG inputBufferLength; + ULONG outputBufferLength; + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION )fdo->DeviceExtension; + ULONG ioControlCode; + NTSTATUS ntStatus; + ULONG length; + PUCHAR pch; + + Ezusb_KdPrint (("IRP_MJ_DEVICE_CONTROL\n")); + + if (!LockDevice(fdo)) + return CompleteRequest(Irp, STATUS_DELETE_PENDING, 0); + + // + // Get a pointer to the current location in the Irp. This is where + // the function codes and parameters are located. + // + irpStack = IoGetCurrentIrpStackLocation (Irp); + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + ioBuffer = Irp->AssociatedIrp.SystemBuffer; + inputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength; + outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength; + + ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode; + + // + // Handle Ioctls from User mode + // + switch (ioControlCode) + { + + case IOCTL_Ezusb_VENDOR_REQUEST: + length = Ezusb_VendorRequest (fdo, (PVENDOR_REQUEST_IN) ioBuffer); + + if (length) + { + Irp->IoStatus.Information = length; + Irp->IoStatus.Status = STATUS_SUCCESS; + } + else + { + Irp->IoStatus.Status = STATUS_SUCCESS; + } + + Ezusb_KdPrint(("Vendor Request returned %d bytes\n", length)); + + break; + + case IOCTL_Ezusb_ANCHOR_DOWNLOAD: + { +#define CHUNKLENGTH 512 + + PURB urb = NULL; + int chunkcount; + int chunklength = 1024; + PVOID ioBufferPtr = NULL; + int i; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + Ezusb_KdPrint (("IOCTL_Ezusb_ANCHOR_DOWNLOAD\n")); + + if (urb) + { + chunkcount = inputBufferLength / CHUNKLENGTH; + ioBufferPtr = ioBuffer; + + for (i=0;iUrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + Ezusb_KdPrint (("ioBuffer: %x | inputBufferLength: %d | outputBufferLength: %d\n", + ioBuffer, inputBufferLength, outputBufferLength)); + + urb->UrbControlVendorClassRequest.TransferBufferLength = CHUNKLENGTH; + urb->UrbControlVendorClassRequest.TransferBuffer = ioBufferPtr; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = 0xA0; + urb->UrbControlVendorClassRequest.Value = (i * CHUNKLENGTH); + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + (char *) ioBufferPtr += CHUNKLENGTH; + } + + ExFreePool(urb); + } + } + + break; + + case IOCTL_EZUSB_ANCHOR_DOWNLOAD: + { + PANCHOR_DOWNLOAD_CONTROL downloadControl = (PANCHOR_DOWNLOAD_CONTROL) ioBuffer; + + Ezusb_KdPrint (("IOCTL_EZUSB_ANCHOR_DOWNLOAD\n")); + + // + // check the arguments + // + if (inputBufferLength != sizeof(ANCHOR_DOWNLOAD_CONTROL) || + outputBufferLength == 0) + { + Ezusb_KdPrint (("Error: Invalid Parameter\n")); + ntStatus = STATUS_INVALID_PARAMETER; + } + else + { + ntStatus = Ezusb_AnchorDownload(fdo, + downloadControl->Offset, + (PUCHAR) MmGetSystemAddressForMdl(Irp->MdlAddress), + outputBufferLength); + } + + break; + } + case IOCTL_Ezusb_GET_CURRENT_CONFIG: + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + break; + + case IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER: + { + ULONG frameNumber = 0; + + // + // make sure the output buffer is valid + // + if (outputBufferLength < sizeof(ULONG)) + { + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + break; + } + + frameNumber = Ezusb_GetCurrentFrameNumber (fdo); + + if (frameNumber) + { + *((PULONG)ioBuffer) = frameNumber; + Irp->IoStatus.Information = sizeof(ULONG); + Irp->IoStatus.Status = STATUS_SUCCESS; + } + else + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + } + + break; + + case IOCTL_Ezusb_RESETPIPE: + { + ULONG pipenum = *((PULONG) ioBuffer); + + Irp->IoStatus.Status = Ezusb_ResetPipe(fdo,pipenum); + } + + break; + + case IOCTL_Ezusb_ABORTPIPE: + { + int pipenum = *((PULONG) ioBuffer); + + Ezusb_AbortPipe(fdo, + (USBD_PIPE_HANDLE) pdx->Interface->Pipes[pipenum].PipeHandle); + + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_SUCCESS; + } + + break; + + case IOCTL_Ezusb_GET_PIPE_INFO: + // + // inputs - none + // outputs - we copy the interface information structure that we have + // stored in our device extension area to the output buffer which + // will be reflected to the user mode application by the IOS. + // + length = 0; + pch = (PUCHAR) ioBuffer; + + if (pdx->Interface) + { + RtlCopyMemory(pch+length, + (PUCHAR) pdx->Interface, + pdx->Interface->Length); + + length += pdx->Interface->Length; + } + + + Irp->IoStatus.Information = length; + Irp->IoStatus.Status = STATUS_SUCCESS; + + break; + + case IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR: + // + // inputs - pointer to a buffer in which to place descriptor data + // outputs - we put the device descriptor data, if any is returned by the device + // in the system buffer and then we set the length inthe Information field + // in the Irp, which will then cause the system to copy the buffer back + // to the user's buffer + // + length = Ezusb_GetDeviceDescriptor (fdo, ioBuffer); + + Ezusb_KdPrint(("Get Device Descriptor returned %d bytes\n", length)); + + Irp->IoStatus.Information = length; + Irp->IoStatus.Status = STATUS_SUCCESS; + + break; + + case IOCTL_Ezusb_GET_STRING_DESCRIPTOR: + { + PGET_STRING_DESCRIPTOR_IN Input = ioBuffer; + + if ((inputBufferLength = sizeof(GET_STRING_DESCRIPTOR_IN)) && + (outputBufferLength > 0)) + { + length = Ezusb_GetStringDescriptor (fdo, + Input->Index, + Input->LanguageId, + ioBuffer, + outputBufferLength); + + if (length) + { + Irp->IoStatus.Information = length; + Irp->IoStatus.Status = STATUS_SUCCESS; + } + else + { + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + } + } + else + { + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + } + } + break; + + case IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR: + // + // inputs - pointer to a buffer in which to place descriptor data + // outputs - we put the configuration descriptor data, if any is returned by the device + // in the system buffer and then we set the length in the Information field + // in the Irp, which will then cause the system to copy the buffer back + // to the user's buffer + // + length = Ezusb_GetConfigDescriptor (fdo, ioBuffer, outputBufferLength); + + Ezusb_KdPrint(("Get Config Descriptor returned %d bytes\n", length)); + + Irp->IoStatus.Information = length; + Irp->IoStatus.Status = STATUS_SUCCESS; + + break; + + case IOCTL_Ezusb_SETINTERFACE: + { + PSET_INTERFACE_IN input = ioBuffer; + + Irp->IoStatus.Status = SetInterface(fdo, + input->interfaceNum, + input->alternateSetting); + Irp->IoStatus.Status = 0; + } + break; + + case IOCTL_Ezusb_RESET: + + Ezusb_ResetParentPort(fdo); + + break; + + case IOCTL_EZUSB_BULK_WRITE: + case IOCTL_EZUSB_BULK_READ: + + Irp->IoStatus.Status = Ezusb_Read_Write(fdo,Irp); + + break; + + case IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST: + + Irp->IoStatus.Status = Ezusb_VendorRequest2(fdo,Irp); + + break; + + case IOCTL_EZUSB_GET_LAST_ERROR: + + // + // make sure the output buffer is ok, and then copy the most recent + // URB status from the device extension to it + // + if (outputBufferLength >= sizeof(ULONG)) + { + *((PULONG)ioBuffer) = pdx->LastFailedUrbStatus; + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = sizeof(ULONG); + } + else + { + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + } + + break; + + case IOCTL_EZUSB_ISO_READ: + case IOCTL_EZUSB_ISO_WRITE: + Irp->IoStatus.Status = Ezusb_StartIsoTransfer(fdo,Irp); + Irp->IoStatus.Information = 0; + break; + + case IOCTL_EZUSB_START_ISO_STREAM: + Irp->IoStatus.Status = Ezusb_StartIsoStream(fdo,Irp); + Irp->IoStatus.Information = 0; + break; + + case IOCTL_EZUSB_STOP_ISO_STREAM: + pdx->StopIsoStream = TRUE; + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + break; + + case IOCTL_EZUSB_READ_ISO_BUFFER: + { + ULONG dataBytesToRead; + ULONG descriptorBytesToRead; + ULONG dataBytesRead; + ULONG descriptorBytesRead; + + PISO_TRANSFER_CONTROL isoControl = + (PISO_TRANSFER_CONTROL)Irp->AssociatedIrp.SystemBuffer; + + // + // verify the input and output params + // + if (inputBufferLength != sizeof(ISO_TRANSFER_CONTROL)) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + break; + } + + if (outputBufferLength != + isoControl->PacketCount * (isoControl->PacketSize + sizeof(USBD_ISO_PACKET_DESCRIPTOR))) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + break; + } + + // + // make sure the ring buffers exist + // + if (!(pdx->DataRingBuffer && pdx->DescriptorRingBuffer)) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + break; + } + + dataBytesToRead = isoControl->PacketCount * isoControl->PacketSize; + dataBytesRead = ReadRingBuffer(pdx->DataRingBuffer, + MmGetSystemAddressForMdl(Irp->MdlAddress), + dataBytesToRead); + Ezusb_KdPrint(("Copied %d bytes from the data ring buffer\n",dataBytesRead)); + + descriptorBytesToRead = (dataBytesRead / isoControl->PacketSize) * sizeof(USBD_ISO_PACKET_DESCRIPTOR); + descriptorBytesRead = ReadRingBuffer(pdx->DescriptorRingBuffer, + ((PUCHAR) MmGetSystemAddressForMdl(Irp->MdlAddress)) + dataBytesRead, + descriptorBytesToRead); + Ezusb_KdPrint(("Copied %d bytes from the desc ring buffer\n",descriptorBytesRead)); + + Irp->IoStatus.Information = dataBytesRead + descriptorBytesRead; + Irp->IoStatus.Status = STATUS_SUCCESS; + } + break; + + case IOCTL_EZUSB_GET_DRIVER_VERSION: + { + PEZUSB_DRIVER_VERSION version = (PEZUSB_DRIVER_VERSION) ioBuffer; + + if (outputBufferLength >= sizeof(EZUSB_DRIVER_VERSION)) + { + version->MajorVersion = EZUSB_MAJOR_VERSION; + version->MinorVersion = EZUSB_MINOR_VERSION; + version->BuildVersion = EZUSB_BUILD_VERSION; + + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = sizeof(EZUSB_DRIVER_VERSION); + } + else + { + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + } + } + break; + + case IOCTL_EZUSB_SET_FEATURE: + { + // + // verify the input params + // + if (inputBufferLength != sizeof(SET_FEATURE_CONTROL)) + { + Irp->IoStatus.Information = 0; + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + break; + } + + Ezusb_SetFeature(fdo,(PSET_FEATURE_CONTROL)Irp->AssociatedIrp.SystemBuffer); + Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; + } + break; + + default: + + Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; + } + + UnlockDevice(fdo); + + ntStatus = Irp->IoStatus.Status; + + IoCompleteRequest (Irp,IO_NO_INCREMENT); + + return ntStatus; + +} + +ULONG +Ezusb_GetDescriptor( + IN PDEVICE_OBJECT fdo, + PVOID DescriptorBuffer, + ULONG BufferLength, + UCHAR DescriptorType + ) +/*++ +Routine Description: + Gets a device descriptor from the given device object + +Arguments: + fdo - pointer to our device object + DescriptorBuffer - buffer to accept the descriptor table + BufferLength - size of the allocated Descriptor Buffer + DescriptorType - Descriptor Type (per USB spec) + +Return Value: + Number of valid bytes in data buffer + +--*/ +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PURB urb = NULL; + ULONG length = 0; + PDEVICE_EXTENSION pdx = NULL; + + Ezusb_KdPrint (("Enter Ezusb_GetDescriptor\n")); + + pdx = fdo->DeviceExtension; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); + + if (urb) + { + if (DescriptorBuffer) + { + UsbBuildGetDescriptorRequest(urb, + (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), + DescriptorType, //descriptor type + 0, //index + 0, //language ID + DescriptorBuffer, //transfer buffer + NULL, //MDL + BufferLength, //buffer length + NULL); //link + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // If successful, get the length from the Urb + if (NT_SUCCESS(ntStatus)) + { + length = urb->UrbControlDescriptorRequest.TransferBufferLength; + } + } + else + { + ntStatus = STATUS_INVALID_PARAMETER; + } + + Ezusb_KdPrint (("%d bytes of descriptor received\n",length)); + ExFreePool(urb); + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + // If unsuccessful, set the length to 0 + if (!(NT_SUCCESS(ntStatus))) + { + length = 0; + } + + Ezusb_KdPrint (("Leaving Ezusb_GetDescriptor\n")); + + return length; +} + +ULONG +Ezusb_GetDeviceDescriptor( + IN PDEVICE_OBJECT fdo, + PVOID pvOutputBuffer + ) +/*++ +Routine Description: + Gets a device descriptor from the given device object + +Arguments: + fdo - pointer to the sample device object + +Return Value: + Number of valid bytes in data buffer + +--*/ +{ + return (Ezusb_GetDescriptor(fdo, + pvOutputBuffer, + sizeof(USB_DEVICE_DESCRIPTOR), + USB_DEVICE_DESCRIPTOR_TYPE)); +} + + +ULONG +Ezusb_GetConfigDescriptor( + IN PDEVICE_OBJECT fdo, + PVOID pvOutputBuffer, + ULONG ulLength + ) +/*++ + +Routine Description: + Gets a configuration descriptor from the given device object + +Arguments: + fdo - pointer to the sample device object + pvOutputBuffer - pointer to the buffer where the data is to be placed + ulLength - length of the buffer + +Return Value: + Number of valid bytes in data buffer + +--*/ +{ + return (Ezusb_GetDescriptor(fdo, + pvOutputBuffer, + ulLength, + USB_CONFIGURATION_DESCRIPTOR_TYPE)); +} + +ULONG +Ezusb_GetOtherSpeedConfigDescriptor( + IN PDEVICE_OBJECT fdo, + PVOID pvOutputBuffer, + ULONG ulLength + ) +/*++ + +Routine Description: + Gets a configuration descriptor from the given device object + +Arguments: + fdo - pointer to the sample device object + pvOutputBuffer - pointer to the buffer where the data is to be placed + ulLength - length of the buffer + +Return Value: + Number of valid bytes in data buffer + +--*/ +{ + return (Ezusb_GetDescriptor(fdo, + pvOutputBuffer, + ulLength, + 7)); +} + +ULONG +Ezusb_GetStringDescriptor( + IN PDEVICE_OBJECT fdo, + UCHAR Index, + USHORT LanguageId, + PVOID pvOutputBuffer, + ULONG ulLength + ) +/*++ + +Routine Description: + Gets the specified string descriptor from the given device object + +Arguments: + fdo - pointer to the sample device object + Index - Index of the string descriptor + LanguageId - Language ID of the string descriptor + pvOutputBuffer - pointer to the buffer where the data is to be placed + ulLength - length of the buffer + +Return Value: + Number of valid bytes in data buffer + +--*/ +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PURB urb = NULL; + ULONG length = 0; + + Ezusb_KdPrint (("Enter Ezusb_GetStringDescriptor\n")); + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); + + if (urb) + { + if (pvOutputBuffer) + { + + UsbBuildGetDescriptorRequest(urb, + (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), + USB_STRING_DESCRIPTOR_TYPE, //descriptor type + Index, //index + LanguageId, //language ID + pvOutputBuffer, //transfer buffer + NULL, //MDL + ulLength, //buffer length + NULL); //link + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + } + else + { + ntStatus = STATUS_INVALID_PARAMETER; + } + + // If successful, get the length from the Urb, otherwise set length to 0 + if (NT_SUCCESS(ntStatus)) + { + length = urb->UrbControlDescriptorRequest.TransferBufferLength; + } + else + length = 0; + + Ezusb_KdPrint (("%d bytes of string descriptor received\n",length)); + + ExFreePool(urb); + + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + Ezusb_KdPrint (("Leaving Ezusb_GetStringDescriptor\n")); + + return length; +} + +NTSTATUS +Ezusb_VendorRequest2( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +{ + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + NTSTATUS ntStatus; + PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation (Irp); + PVENDOR_OR_CLASS_REQUEST_CONTROL requestControl = + (PVENDOR_OR_CLASS_REQUEST_CONTROL) Irp->AssociatedIrp.SystemBuffer; + ULONG bufferLength = + irpStack->Parameters.DeviceIoControl.OutputBufferLength; + PURB urb = NULL; + ULONG urbSize = 0; + + ULONG transferFlags = 0; + USHORT urbFunction = 0; + + // + // verify that the input parameter is correct (or at least that it's + // the right size + // + if (irpStack->Parameters.DeviceIoControl.InputBufferLength != + sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL)) + { + ntStatus = STATUS_INVALID_PARAMETER; + return ntStatus; + } + + // + // allocate and fill in the Usb request (URB) + // + urbSize = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + + urb = ExAllocatePool(NonPagedPool,urbSize); + + if (!urb) + { + return STATUS_NO_MEMORY; + } + + RtlZeroMemory(urb,urbSize); + + transferFlags = USBD_SHORT_TRANSFER_OK; + + // + // get direction info from the input parms + // + if (requestControl->direction) + transferFlags |= USBD_TRANSFER_DIRECTION_IN; + + // + // the type of request (class or vendor) and the recepient + // (device, interface, endpoint, other) combine to determine the + // URB function. The following ugly code transforms fields in + // the input param into an URB function + // + switch ((requestControl->requestType << 2) | requestControl->recepient) + { + case 0x04: + urbFunction = URB_FUNCTION_CLASS_DEVICE; + break; + case 0x05: + urbFunction = URB_FUNCTION_CLASS_INTERFACE; + break; + case 0x06: + urbFunction = URB_FUNCTION_CLASS_ENDPOINT; + break; + case 0x07: + urbFunction = URB_FUNCTION_CLASS_OTHER; + break; + case 0x08: + urbFunction = URB_FUNCTION_VENDOR_DEVICE; + break; + case 0x09: + urbFunction = URB_FUNCTION_VENDOR_INTERFACE; + break; + case 0x0A: + urbFunction = URB_FUNCTION_VENDOR_ENDPOINT; + break; + case 0x0B: + urbFunction = URB_FUNCTION_VENDOR_OTHER; + break; + default: + return STATUS_INVALID_PARAMETER; + } + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = urbFunction; + + urb->UrbControlVendorClassRequest.TransferFlags = transferFlags; + urb->UrbControlVendorClassRequest.TransferBufferLength = bufferLength; + urb->UrbControlVendorClassRequest.TransferBufferMDL = Irp->MdlAddress; + urb->UrbControlVendorClassRequest.Request = requestControl->request; + urb->UrbControlVendorClassRequest.Value = requestControl->value; + urb->UrbControlVendorClassRequest.Index = requestControl->index; + + // + // Call the USB Stack. + // + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // + // If the transfer was successful, report the length of the transfer to the + // caller by setting IoStatus.Information + // + if (NT_SUCCESS(ntStatus)) + { + Irp->IoStatus.Information = urb->UrbControlVendorClassRequest.TransferBufferLength; + Ezusb_KdPrint(("Successfully transfered 0x%x bytes\n",Irp->IoStatus.Information)); + } + + if (urb) + ExFreePool(urb); + + return ntStatus; +} + + +ULONG +Ezusb_VendorRequest( + IN PDEVICE_OBJECT fdo, + IN PVENDOR_REQUEST_IN pVendorRequest + ) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PURB urb = NULL; + ULONG length = 0; + PUCHAR buffer = NULL; + + Ezusb_KdPrint (("Enter Ezusb_VendorRequest - yahoooo\n")); + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + if (urb) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + // + // fill in the URB + // + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferBufferLength = pVendorRequest->wLength; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = pVendorRequest->bRequest; + urb->UrbControlVendorClassRequest.Value = pVendorRequest->wValue; + urb->UrbControlVendorClassRequest.Index = pVendorRequest->wIndex; + + + // + // very kludgey. The idea is: if its an IN then a buffer has been passed + // in from user mode. So, use the pointer to the system buffer as the transfer + // buffer. If the transfer is an out, then we need to allocate a transfer + // buffer. If the length of the transfer is 1, then put pVendorRequest->bData + // in the buffer. Otherwise, fill the buffer with an incrementing byte pattern. + // yuch + // + if (pVendorRequest->direction) + { + urb->UrbControlVendorClassRequest.TransferFlags |= USBD_TRANSFER_DIRECTION_IN; + urb->UrbControlVendorClassRequest.TransferBuffer = pVendorRequest; + + } + else + { + urb->UrbControlVendorClassRequest.TransferFlags = 0; + buffer = ExAllocatePool(NonPagedPool, pVendorRequest->wLength); + + urb->UrbControlVendorClassRequest.TransferBuffer = buffer; + + if (pVendorRequest->wLength == 1) + { + buffer[0] = pVendorRequest->bData; + } + else + { + int i; + PUCHAR ptr = buffer; + + for (i=0; i < pVendorRequest->wLength; i++) + { + *ptr = (UCHAR) i; + ptr++; + } + } + } + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // + // only return a length if this was an IN transaction + // + if (pVendorRequest->direction) + { + length = urb->UrbControlVendorClassRequest.TransferBufferLength; + } + else + { + length = 0; + } + + ExFreePool(urb); + if (buffer) + ExFreePool(buffer); + } + return length; +} + +NTSTATUS +Ezusb_ResetPipe( + IN PDEVICE_OBJECT fdo, + ULONG PipeNum + ) +/*++ + +Routine Description: + + Reset a given USB pipe. + NOTE: this will reset the data toggle on the host as well + +Arguments: + +Return Value: + + +--*/ +{ + NTSTATUS ntStatus; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL; + USBD_PIPE_HANDLE pipeHandle = NULL; + PURB urb; + USBD_VERSION_INFORMATION VersionInformation; + + Ezusb_KdPrint (("EZUSB.SYS: Reset Pipe \n")); + + // + // verify that the selected pipe is valid, and get a handle to it. If anything + // is wrong, return an error + // + interfaceInfo = pdx->Interface; + + if (!interfaceInfo) + { + Ezusb_KdPrint(("Ezusb_ResetPipe() no interface info - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + if (PipeNum > interfaceInfo->NumberOfPipes) + { + Ezusb_KdPrint(("Ezusb_ResetPipe() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeHandle = interfaceInfo->Pipes[PipeNum].PipeHandle; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_PIPE_REQUEST)); + + if (urb) + { + urb->UrbHeader.Length = (USHORT) sizeof (struct _URB_PIPE_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_RESET_PIPE; + urb->UrbPipeRequest.PipeHandle = pipeHandle; + + // + // kludge. Win98 changed the size of the URB_PIPE_REQUEST. + // Check the USBDI version. If it is prior to win98 (0x101) + // make the structure smaller. + // + USBD_GetUSBDIVersion(&VersionInformation); + if (VersionInformation.USBDI_Version < 0x101) + { + Ezusb_KdPrint(("Ezusb_ResetPipe() Detected OSR2.1\n")); + urb->UrbHeader.Length -= sizeof(ULONG); + } + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + ExFreePool(urb); + } + else + { + ntStatus = STATUS_INSUFFICIENT_RESOURCES; + } + + return ntStatus; +} + +NTSTATUS +Ezusb_AbortPipe( + IN PDEVICE_OBJECT fdo, + IN USBD_PIPE_HANDLE PipeHandle + ) +/*++ + +Routine Description: + + cancel pending transfers for a pipe + +Arguments: + +Return Value: + + +--*/ +{ + NTSTATUS ntStatus; + PURB urb; + USBD_VERSION_INFORMATION VersionInformation; + + Ezusb_KdPrint (("'EZUSB.SYS: Reset Pipe \n")); + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_PIPE_REQUEST)); + + if (urb) + { + RtlZeroMemory(urb,sizeof(struct _URB_PIPE_REQUEST)); + urb->UrbHeader.Length = (USHORT) sizeof (struct _URB_PIPE_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_ABORT_PIPE; + urb->UrbPipeRequest.PipeHandle = PipeHandle; + + // + // kludge. Win98 changed the size of the URB_PIPE_REQUEST. + // Check the USBDI version. If it is prior to win98 (0x101) + // make the structure smaller. + // + USBD_GetUSBDIVersion(&VersionInformation); + if (VersionInformation.USBDI_Version < 0x101) + { + Ezusb_KdPrint(("Ezusb_ResetPipe() Detected OSR2.1\n")); + urb->UrbHeader.Length -= sizeof(ULONG); + } + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + ExFreePool(urb); + } + else + { + ntStatus = STATUS_INSUFFICIENT_RESOURCES; + } + + + return ntStatus; +} + + +ULONG +Ezusb_GetCurrentFrameNumber( + IN PDEVICE_OBJECT fdo + ) +{ + PURB urb = NULL; + PDEVICE_EXTENSION pdx = NULL; + NTSTATUS ntStatus = STATUS_SUCCESS; + ULONG frameNumber = 0; + + Ezusb_KdPrint (("Enter Ezusb_GetCurrentFrameNumber\n")); + + pdx = fdo->DeviceExtension; + + urb = ExAllocatePool(NonPagedPool,sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER)); + + if (urb == NULL) + return 0; + + RtlZeroMemory(urb,sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER)); + + urb->UrbHeader.Length = sizeof(struct _URB_GET_CURRENT_FRAME_NUMBER); + urb->UrbHeader.Function = URB_FUNCTION_GET_CURRENT_FRAME_NUMBER; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (NT_SUCCESS(ntStatus)) + { + frameNumber = urb->UrbGetCurrentFrameNumber.FrameNumber; + } + + ExFreePool(urb); + + return frameNumber; +} + +NTSTATUS +Ezusb_ResetParentPort( + IN IN PDEVICE_OBJECT fdo + ) +/*++ + +Routine Description: + + Reset the our parent port + +Arguments: + +Return Value: + + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus, status = STATUS_SUCCESS; + PIRP irp; + KEVENT event; + IO_STATUS_BLOCK ioStatus; + PIO_STACK_LOCATION nextStack; + PDEVICE_EXTENSION pdx; + + Ezusb_KdPrint (("EZUSB.SYS: enter Ezusb_ResetPort\n")); + + pdx = fdo->DeviceExtension; + + // + // issue a synchronous request + // + + KeInitializeEvent(&event, NotificationEvent, FALSE); + + irp = IoBuildDeviceIoControlRequest( + IOCTL_INTERNAL_USB_RESET_PORT, + pdx->StackDeviceObject, +// pdx->TopOfStackDeviceObject, + NULL, + 0, + NULL, + 0, + TRUE, /* INTERNAL */ + &event, + &ioStatus); + + // + // Call the class driver to perform the operation. If the returned status + // is PENDING, wait for the request to complete. + // + + nextStack = IoGetNextIrpStackLocation(irp); + ASSERT(nextStack != NULL); + + Ezusb_KdPrint (("EZUSB.SYS: calling USBD enable port api\n")); + + ntStatus = IoCallDriver(pdx->StackDeviceObject, + irp); + + Ezusb_KdPrint (("EZUSB.SYS: return from IoCallDriver USBD %x\n", ntStatus)); + + if (ntStatus == STATUS_PENDING) { + + Ezusb_KdPrint (("EZUSB.SYS: Wait for single object\n")); + + status = KeWaitForSingleObject( + &event, + Suspended, + KernelMode, + FALSE, + NULL); + + Ezusb_KdPrint (("EZUSB.SYS: Wait for single object, returned %x\n", status)); + + } else { + ioStatus.Status = ntStatus; + } + + // + // USBD maps the error code for us + // + ntStatus = ioStatus.Status; + + Ezusb_KdPrint (("EZUSB.SYS: Ezusb_ResetPort (%x)\n", ntStatus)); + + return ntStatus; +} + +ULONG +Ezusb_DownloadTest( + IN PDEVICE_OBJECT fdo, + IN PVENDOR_REQUEST_IN pVendorRequest + ) +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PURB urb = NULL; + ULONG length = 0; + ULONG i; + PUCHAR buffer1 = NULL; + PUCHAR buffer2 = NULL; + ULONG CompareCount = 0; + + Ezusb_KdPrint (("Enter Ezusb_VendorRequest - yahoooo\n")); + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + buffer1 = ExAllocatePool(NonPagedPool, CHUNKLENGTH); + buffer2 = ExAllocatePool(NonPagedPool, CHUNKLENGTH); + + for (i=0; i < CHUNKLENGTH; i++) + { + buffer1[i] = (UCHAR) i; + } + + if (urb) + { + for (i=0; i < 5120 / CHUNKLENGTH; i++) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + // + // fill in the URB + // + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferBufferLength = CHUNKLENGTH; + urb->UrbControlVendorClassRequest.TransferBuffer = buffer1; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = 0xA0; + urb->UrbControlVendorClassRequest.Value = (unsigned short) i * CHUNKLENGTH; + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + } + + for (i=0; i < 5120 / CHUNKLENGTH; i++) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + RtlZeroMemory(buffer2, CHUNKLENGTH); + + // + // fill in the URB + // + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferBufferLength = CHUNKLENGTH; + urb->UrbControlVendorClassRequest.TransferBuffer = buffer2; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = 0xA0; + urb->UrbControlVendorClassRequest.Value = (unsigned short) i * CHUNKLENGTH; + urb->UrbControlVendorClassRequest.Index = 0; + urb->UrbControlVendorClassRequest.TransferFlags |= USBD_TRANSFER_DIRECTION_IN; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + CompareCount = RtlCompareMemory(buffer1,buffer2,CHUNKLENGTH); + Ezusb_KdPrint (("%d matched\n",CompareCount)) + if (CompareCount != CHUNKLENGTH) + { + Ezusb_KdPrint (("**** Compare Error *****************************************************\n")); + } + + + } + + } + return length; +} + + +PUSB_CONFIGURATION_DESCRIPTOR +GetConfigDescriptor( + IN PDEVICE_OBJECT fdo + ) +/*++ + +Routine Description: + +Arguments: + + + +Return Value: + + NT status code + +--*/ +{ + PDEVICE_EXTENSION pdx; + NTSTATUS ntStatus; + PURB urb; + ULONG siz; + PUSB_CONFIGURATION_DESCRIPTOR configurationDescriptor = NULL; + + Ezusb_KdPrint (("Ezusb.SYS: enter Ezusb_GetConfigDescriptor\n")); + + pdx = fdo->DeviceExtension; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_DESCRIPTOR_REQUEST)); + + if (urb) { + + + siz = sizeof(USB_CONFIGURATION_DESCRIPTOR)+256; + +get_config_descriptor_retry2: + + configurationDescriptor = ExAllocatePool(NonPagedPool, + siz); + + if (configurationDescriptor) { + + UsbBuildGetDescriptorRequest(urb, + (USHORT) sizeof (struct _URB_CONTROL_DESCRIPTOR_REQUEST), + USB_CONFIGURATION_DESCRIPTOR_TYPE, + 0, + 0, + configurationDescriptor, + NULL, + siz, + NULL); + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + Ezusb_KdPrint (("Ezusb.SYS: Configuration Descriptor = %x, len %x\n", + configurationDescriptor, + urb->UrbControlDescriptorRequest.TransferBufferLength)); + } else { + ntStatus = STATUS_INSUFFICIENT_RESOURCES; + } + + if (NT_SUCCESS(ntStatus) && + (urb->UrbControlDescriptorRequest.TransferBufferLength >= + sizeof(USB_CONFIGURATION_DESCRIPTOR)) && + (configurationDescriptor->wTotalLength >= + sizeof(USB_CONFIGURATION_DESCRIPTOR))) + { + // + // The Get Config Descriptor request did not return an error + // AND at least enough data was transferred to fill a Config + // Descriptor AND the Config Descriptor wLength is at least the + // size of a Config Descriptor + // + if (configurationDescriptor->wTotalLength > siz) + { + // + // The request buffer is not big enough to hold the + // entire set of descriptors. Free the current buffer + // and retry with a buffer which should be big enough. + // + siz = configurationDescriptor->wTotalLength; + ExFreePool(configurationDescriptor); + configurationDescriptor = NULL; + goto get_config_descriptor_retry2; + } + else if (configurationDescriptor->wTotalLength > + urb->UrbControlDescriptorRequest.TransferBufferLength) + { + // + // The request buffer is greater than or equal to the + // Config Descriptor wLength, but less data was transferred + // than wLength. Return NULL to indicate a device error. + // + ExFreePool(configurationDescriptor); + configurationDescriptor = NULL; + } + // + // else everything is OK with the Config Descriptor, return it. + // + } + else + { + // + // The Get Config Descriptor request returned an error OR + // not enough data was transferred to fill a Config Descriptor + // OR the Config Descriptor wLength is less than the size of + // a Config Descriptor. Return NULL to indicate a device error. + // + ExFreePool(configurationDescriptor); + configurationDescriptor = NULL; + } + + ExFreePool(urb); + + } else { + ntStatus = STATUS_INSUFFICIENT_RESOURCES; + } + + Ezusb_KdPrint (("Ezusb.SYS: exit Ezusb_GetConfigDescriptor\n")); + + return configurationDescriptor; +} + +NTSTATUS +ConfigureDevice( + IN PDEVICE_OBJECT fdo + ) +/*++ +Routine Description: + Configures the USB device via USB-specific device requests and interaction + with the USB software subsystem. + +Arguments: + fdo - pointer to the device object for this instance of the Ezusb Device + +Return Value: + NT status code +--*/ +{ + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + NTSTATUS ntStatus; + PURB urb = NULL; + ULONG numberOfPipes; + PUSB_CONFIGURATION_DESCRIPTOR configurationDescriptor = NULL; + PUSB_INTERFACE_DESCRIPTOR interfaceDescriptor = NULL; + + Ezusb_KdPrint (("enter ConfigureDevice\n")); + + // + // Get the configuration Descriptor + // + configurationDescriptor = GetConfigDescriptor(fdo); + + if (!configurationDescriptor) + { + Ezusb_KdPrint (("Get Configuration Descriptor Failed\n")); + ntStatus = STATUS_UNSUCCESSFUL; + goto CleanupConfigureDevice; + } + +#define INTERFACENUMBER 0 +#define ALTERNATESETTING 1 + // + // Get the interface Descriptor for the interface we want + // + interfaceDescriptor = USBD_ParseConfigurationDescriptorEx( + configurationDescriptor, + configurationDescriptor, + INTERFACENUMBER, + ALTERNATESETTING, + -1, + -1, + -1); + if (!interfaceDescriptor) + { + ntStatus = STATUS_UNSUCCESSFUL; + goto CleanupConfigureDevice; + } + + numberOfPipes = interfaceDescriptor->bNumEndpoints; + + // + // Configure the Device, but don't select any interfaces + // + urb = USBD_CreateConfigurationRequestEx(configurationDescriptor, NULL); + + if (!urb) + { + Ezusb_KdPrint (("USBD_CreateConfigurationRequestEx Failed\n")); + ntStatus = STATUS_UNSUCCESSFUL; + goto CleanupConfigureDevice; + } + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (NT_SUCCESS(ntStatus)) + { + pdx->ConfigurationHandle = urb->UrbSelectConfiguration.ConfigurationHandle; + } + else + { + Ezusb_KdPrint (("Configuration Request Failed\n")); + ntStatus = STATUS_UNSUCCESSFUL; + goto CleanupConfigureDevice; + } + +CleanupConfigureDevice: + + // Clean up and exit this routine + if (urb != NULL) + { + ExFreePool(urb); + } + + if (configurationDescriptor != NULL) + { + ExFreePool(configurationDescriptor); + } + + Ezusb_KdPrint (("exit Ezusb_ConfigureDevice (%x)\n", ntStatus)); + return ntStatus; +} + + +NTSTATUS +SetInterface( + IN PDEVICE_OBJECT fdo, + IN UCHAR InterfaceNumber, + IN UCHAR AlternateSetting + ) +{ + PUSBD_INTERFACE_INFORMATION interfaceInformation = NULL; + PUSB_INTERFACE_DESCRIPTOR interfaceDescriptor = NULL; + PUSB_CONFIGURATION_DESCRIPTOR configurationDescriptor = NULL; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + PURB urb = NULL; + USHORT urbSize; + ULONG numberOfPipes; + ULONG i,j; + NTSTATUS ntStatus; + + // + // Get the configuration Descriptor + // + configurationDescriptor = GetConfigDescriptor(fdo); + if (!configurationDescriptor) + { + Ezusb_KdPrint (("Get Configuration Descriptor Failed\n")); + ntStatus = STATUS_UNSUCCESSFUL; + goto CleanupSetInterface; + } + + // + // Get the interface Descriptor for the interface we want + // + interfaceDescriptor = USBD_ParseConfigurationDescriptorEx( + configurationDescriptor, + configurationDescriptor, + InterfaceNumber, + AlternateSetting, + -1, + -1, + -1); + + if (!interfaceDescriptor) + { + ntStatus = STATUS_UNSUCCESSFUL; + goto CleanupSetInterface; + } + + numberOfPipes = interfaceDescriptor->bNumEndpoints; + Ezusb_KdPrint (("numberOfPipes = %d\n", numberOfPipes)); + + + urbSize = GET_SELECT_INTERFACE_REQUEST_SIZE(numberOfPipes); + Ezusb_KdPrint (("urbSize = %d\n", urbSize)); + urb = ExAllocatePool(NonPagedPool,urbSize); + + if (!urb) + { + ntStatus = STATUS_NO_MEMORY; + goto CleanupSetInterface; + } + + RtlZeroMemory(urb,urbSize); + + UsbBuildSelectInterfaceRequest(urb, + urbSize, + pdx->ConfigurationHandle, + InterfaceNumber, + AlternateSetting); + + + interfaceInformation = &(urb->UrbSelectInterface.Interface); + interfaceInformation->Length = GET_USBD_INTERFACE_SIZE(numberOfPipes); + + for (i = 0 ;i < numberOfPipes ;i++ ) + { + interfaceInformation->Pipes[i].MaximumTransferSize = (64*1024) -1; + } + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // + // If that succeeded, then update the Interface structure + // in the device extension. + // + if (NT_SUCCESS(ntStatus)) + { + for (j=0; jNumberOfPipes; j++) + { + PUSBD_PIPE_INFORMATION pipeInformation; + + pipeInformation = &interfaceInformation->Pipes[j]; + + Ezusb_KdPrint (("---------\n")); + Ezusb_KdPrint (("PipeType 0x%x\n", pipeInformation->PipeType)); + Ezusb_KdPrint (("EndpointAddress 0x%x\n", pipeInformation->EndpointAddress)); + Ezusb_KdPrint (("MaxPacketSize 0x%x\n", pipeInformation->MaximumPacketSize)); + Ezusb_KdPrint (("Interval 0x%x\n", pipeInformation->Interval)); + Ezusb_KdPrint (("Handle 0x%x\n", pipeInformation->PipeHandle)); + Ezusb_KdPrint (("MaximumTransferSize 0x%x\n", pipeInformation->MaximumTransferSize)); + } + + if (pdx->Interface) + { + ExFreePool(pdx->Interface); + } + + pdx->Interface = NULL; + pdx->Interface = ExAllocatePool(NonPagedPool,interfaceInformation->Length); + if (!pdx->Interface) + { + ntStatus = STATUS_NO_MEMORY; + goto CleanupSetInterface; + } + RtlCopyMemory(pdx->Interface, interfaceInformation, interfaceInformation->Length); + } + +CleanupSetInterface: + + // Clean up and exit this routine + if (urb != NULL) + { + ExFreePool(urb); + } + + if (configurationDescriptor != NULL) + { + ExFreePool(configurationDescriptor); + } + + return(ntStatus); + +} + +#define BYTES_PER_LINE 0x10 + +void +DumpBuffer(PVOID pvBuffer, ULONG length) +{ + int nItems = 0; + char temp[64] = ""; + char temp2[64] = ""; + ULONG i; + ULONG j; + PUCHAR ptr; + + + ptr = (PUCHAR) pvBuffer; + + for (i = 0; i < ((length + BYTES_PER_LINE - 1) / BYTES_PER_LINE); i++) + { + sprintf(temp,"%04X ",(i*BYTES_PER_LINE)); + for (j = 0; j < BYTES_PER_LINE; j++) + { + if (((i * BYTES_PER_LINE) + j) < length) + { + sprintf(temp2,"%02X ",*ptr++); + strcat(temp,temp2); + } + } +// SendMessage (hOutputBox, LB_ADDSTRING, 0, (LPARAM)temp); + Ezusb_KdPrint (("%s\n",temp)); + } +} + + + +/////////////////////////////////////////////////////////////////////////////// +// @func Lock a SIMPLE device object +// @parm Address of our device extension +// @rdesc TRUE if it was possible to lock the device, FALSE otherwise. +// @comm A FALSE return value indicates that we're in the process of deleting +// the device object, so all new requests should be failed + +BOOLEAN LockDevice( + IN PDEVICE_OBJECT fdo + ) +{ + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; + + // Increment use count on our device object + LONG usage = InterlockedIncrement(&pdx->usage); + + // AddDevice initialized the use count to 1, so it ought to be bigger than + // one now. HandleRemoveDevice sets the "removing" flag and decrements the + // use count, possibly to zero. So if we find a use count of "1" now, we + // should also find the "removing" flag set. + + ASSERT(usage > 1 || pdx->removing); + + // If device is about to be removed, restore the use count and return FALSE. + // If we're in a race with HandleRemoveDevice (maybe running on another CPU), + // the sequence we've followed is guaranteed to avoid a mistaken deletion of + // the device object. If we test "removing" after HandleRemoveDevice sets it, + // we'll restore the use count and return FALSE. In the meantime, if + // HandleRemoveDevice decremented the count to 0 before we did our increment, + // its thread will have set the remove event. Otherwise, we'll decrement to 0 + // and set the event. Either way, HandleRemoveDevice will wake up to finish + // removing the device, and we'll return FALSE to our caller. + // + // If, on the other hand, we test "removing" before HandleRemoveDevice sets it, + // we'll have already incremented the use count past 1 and will return TRUE. + // Our caller will eventually call UnlockDevice, which will decrement the use + // count and might set the event HandleRemoveDevice is waiting on at that point. + + if (pdx->removing) + { + if (InterlockedDecrement(&pdx->usage) == 0) + KeSetEvent(&pdx->evRemove, 0, FALSE); + return FALSE; + } + + return TRUE; +} + +/////////////////////////////////////////////////////////////////////////////// +// @func Unlock a SIMPLE device object +// @parm Address of our device extension +// @comm If the use count drops to zero, set the evRemove event because we're +// about to remove this device object. + +void UnlockDevice( + PDEVICE_OBJECT fdo + ) +{ + PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; + LONG usage = InterlockedDecrement(&pdx->usage); + + ASSERT(usage >= 0); + + if (usage == 0) + { // removing device + ASSERT(pdx->removing); // HandleRemoveDevice should already have set this + KeSetEvent(&pdx->evRemove, 0, FALSE); + } // removing device +} + +NTSTATUS IsoTransferComplete( + IN PDEVICE_OBJECT bunkfdo, + IN PIRP Irp, + IN PVOID Context + ) +{ + NTSTATUS ntStatus,status; + PISO_TRANSFER_OBJECT transferObject = (PISO_TRANSFER_OBJECT) Context; + PISO_STREAM_OBJECT streamObject = transferObject->StreamObject; + PDEVICE_OBJECT fdo = streamObject->DeviceObject; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + PIO_STACK_LOCATION nextStack; + PURB urb = transferObject->Urb; + USHORT urbSize = 0; + ULONG i; + + + Ezusb_KdPrint(("IsoTransferComplete Irp Status 0x%x\n",Irp->IoStatus.Status)); + + // + // copy the ISO transfer descriptors to the callers buffer. The user mode caller passed + // in a large buffer. That buffer holds both the data and also provides space for the ISO + // descriptors. This way, the caller can verify the status of each ISO packet transmitted + // or sent. + // + RtlCopyMemory((PUCHAR) streamObject->IsoDescriptorBuffer + (transferObject->Frame * sizeof(USBD_ISO_PACKET_DESCRIPTOR)), + urb->UrbIsochronousTransfer.IsoPacket, + (streamObject->FramesPerBuffer * sizeof(USBD_ISO_PACKET_DESCRIPTOR))); + + for (i=0;iFramesPerBuffer; i++) + { + Ezusb_KdPrint (("Packet %d length = %d status = %d\n",i, + urb->UrbIsochronousTransfer.IsoPacket[i].Length,urb->UrbIsochronousTransfer.IsoPacket[i].Status)); + } + + + transferObject->Frame += (streamObject->FramesPerBuffer * streamObject->BufferCount); + + if (transferObject->Frame < streamObject->NumPackets) + { + Ezusb_KdPrint(("IsoTransferComplete setting up the next transfer at frame %d\n",transferObject->Frame)); + + // + // reinitialize the URB for the next transfer. + // + urbSize = GET_ISO_URB_SIZE(streamObject->FramesPerBuffer); + RtlZeroMemory(urb,urbSize); + + urb->UrbHeader.Length = urbSize; + urb->UrbHeader.Function = URB_FUNCTION_ISOCH_TRANSFER; + urb->UrbIsochronousTransfer.PipeHandle = streamObject->PipeInfo->PipeHandle; + urb->UrbIsochronousTransfer.TransferFlags = + USB_ENDPOINT_DIRECTION_IN(streamObject->PipeInfo->EndpointAddress) ? USBD_TRANSFER_DIRECTION_IN : 0; + urb->UrbIsochronousTransfer.TransferFlags |= + USBD_START_ISO_TRANSFER_ASAP; + urb->UrbIsochronousTransfer.TransferFlags |= + USBD_SHORT_TRANSFER_OK; + urb->UrbIsochronousTransfer.TransferBufferLength = + streamObject->PacketSize * streamObject->FramesPerBuffer; + urb->UrbIsochronousTransfer.TransferBuffer = + ((PUCHAR) streamObject->TransferBuffer) + (transferObject->Frame * streamObject->PacketSize); + urb->UrbIsochronousTransfer.NumberOfPackets = streamObject->FramesPerBuffer; + + for (i=0; iFramesPerBuffer; i++) + { + urb->UrbIsochronousTransfer.IsoPacket[i].Offset = i * streamObject->PacketSize; + urb->UrbIsochronousTransfer.IsoPacket[i].Length = streamObject->PacketSize; + } + + // + // initialize the IRP for the next transfer + // cuz lynn says I hafta + // + IoInitializeIrp(Irp, + IoSizeOfIrp((pdx->StackDeviceObject->StackSize + 1)), + (CCHAR)(pdx->StackDeviceObject->StackSize + 1)); + + nextStack = IoGetNextIrpStackLocation(Irp); + + nextStack->Parameters.Others.Argument1 = transferObject->Urb; + nextStack->Parameters.DeviceIoControl.IoControlCode = + IOCTL_INTERNAL_USB_SUBMIT_URB; + nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; + + IoSetCompletionRoutine(Irp, + IsoTransferComplete, + transferObject, + TRUE, + TRUE, + TRUE); + + // + // submit the request + // + status = IoCallDriver(pdx->StackDeviceObject,Irp); + Ezusb_KdPrint(("IsoTransferComplete Resubmit Irp Status 0x%x\n",status)); + ntStatus = STATUS_MORE_PROCESSING_REQUIRED; + } + else + { + Ezusb_KdPrint(("IsoTransferComplete All done, setting event\n")); + + IoFreeIrp(Irp); + ExFreePool(urb); + + KeSetEvent(&transferObject->Done,1,FALSE); + + ntStatus = STATUS_MORE_PROCESSING_REQUIRED; + } + + return ntStatus; +} + +NTSTATUS Ezusb_StartIsoTransfer( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +{ + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation (Irp); + PISO_TRANSFER_CONTROL isoControl = + (PISO_TRANSFER_CONTROL)Irp->AssociatedIrp.SystemBuffer; + ULONG bufferLength = + irpStack->Parameters.DeviceIoControl.OutputBufferLength; + ULONG packetSize = 0; + PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL; + PUSBD_PIPE_INFORMATION pipeInfo = NULL; + USBD_PIPE_HANDLE pipeHandle = NULL; + PISO_STREAM_OBJECT streamObject; + ULONG i; + + // + // verify that the selected pipe is valid, and get a handle to it. If anything + // is wrong, return an error + // + interfaceInfo = pdx->Interface; + + if (!interfaceInfo) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() no interface info - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + if (isoControl->PipeNum > interfaceInfo->NumberOfPipes) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeInfo = &(interfaceInfo->Pipes[isoControl->PipeNum]); + + if (!(pipeInfo->PipeType == UsbdPipeTypeIsochronous)) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeHandle = pipeInfo->PipeHandle; + + if (!pipeHandle) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() invalid pipe - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + // + // verify that the FramesPerBuffer and BufferCount parameters are correct. + // A "feature" of this function is that PacketCount must + // be zero modulus (FramesPerBuffer * BufferCount). + // + if (isoControl->PacketCount % (isoControl->FramesPerBuffer * isoControl->BufferCount)) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() Invalid parameter - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + // + // verify that the caller has provided a buffer large enough for + // the requested transfer. The buffer must have room for all of + // the ISO data plus room for an array of ISO Packet Descriptor + // objects (1 for each packet transferred). + // + packetSize = isoControl->PacketSize; + + if (bufferLength < (isoControl->PacketCount * (packetSize + sizeof(USBD_ISO_PACKET_DESCRIPTOR)))) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() OutputBuffer too small - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + // + // Allocate the streamObject + // + streamObject = ExAllocatePool(NonPagedPool, sizeof(ISO_STREAM_OBJECT)); + + if (!streamObject) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate stream object - Exiting\n")); + return STATUS_NO_MEMORY; + } + + // + // FramesPerBuffer specifies how many frames of ISO data are transferred + // by a single URB. This field corresponds to the NumberOfPackets + // field in the ISO transfer URB (_URB_ISOCH_TRANSFER) + // + streamObject->FramesPerBuffer = isoControl->FramesPerBuffer; + + // + // BufferCount specifies how many IRP's are queued to carry out an ISO transfer. + // + streamObject->BufferCount = isoControl->BufferCount; + + streamObject->DeviceObject = fdo; + streamObject->PipeInfo = pipeInfo; + streamObject->PacketSize = packetSize; + streamObject->NumPackets = isoControl->PacketCount; + streamObject->TransferBuffer = MmGetSystemAddressForMdl(Irp->MdlAddress); + streamObject->TransferBufferLength = streamObject->PacketSize * streamObject->NumPackets; + streamObject->IsoDescriptorBuffer = (PUCHAR) streamObject->TransferBuffer + streamObject->TransferBufferLength; + + streamObject->TransferObject = ExAllocatePool(NonPagedPool, + sizeof(ISO_TRANSFER_OBJECT) * streamObject->BufferCount); + + if (!streamObject->TransferObject) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate transfer object - Exiting\n")); + return STATUS_NO_MEMORY; + } + + for (i=0; i < streamObject->BufferCount; i++) + { + InitTransferObject(streamObject,i); + } + + for (i=0; i < streamObject->BufferCount; i++) + { + IoCallDriver(pdx->StackDeviceObject, + streamObject->TransferObject[i].Irp); + } + + // + // wait for those guys to finish + // + for (i=0; i < streamObject->BufferCount; i++) + { + KeWaitForSingleObject( + &streamObject->TransferObject[i].Done, + Suspended, + KernelMode, + FALSE, + NULL); + } + + // + // free the stream and transfer objects + // + ExFreePool(streamObject->TransferObject); + ExFreePool(streamObject); + + return STATUS_SUCCESS; +} + +NTSTATUS IsoStreamTransferComplete( + IN PDEVICE_OBJECT bunkfdo, + IN PIRP Irp, + IN PVOID Context + ) +{ + NTSTATUS ntStatus,status; + PISO_TRANSFER_OBJECT transferObject = (PISO_TRANSFER_OBJECT) Context; + PISO_STREAM_OBJECT streamObject = transferObject->StreamObject; + PDEVICE_OBJECT fdo = streamObject->DeviceObject; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + PIO_STACK_LOCATION nextStack; + PURB urb = transferObject->Urb; + USHORT urbSize = 0; + ULONG i; + PUSBD_PIPE_INFORMATION pipeInfo = streamObject->PipeInfo; + + Ezusb_KdPrint(("IsoTransferComplete Irp Status 0x%x\n",Irp->IoStatus.Status)); + for (i=0;iFramesPerBuffer; i++) + { + Ezusb_KdPrint (("Packet %d length = %d status = %d\n",i, + urb->UrbIsochronousTransfer.IsoPacket[i].Length,urb->UrbIsochronousTransfer.IsoPacket[i].Status)); + } + + // + // write the transfer descriptors to the descriptor ring buffer + // + WriteRingBuffer(streamObject->DescriptorRingBuffer, + (PUCHAR) &urb->UrbIsochronousTransfer.IsoPacket[0], + (streamObject->FramesPerBuffer * sizeof(USBD_ISO_PACKET_DESCRIPTOR))); + + // + // write the transfer data to the data ring buffer + // + WriteRingBuffer(streamObject->DataRingBuffer, + urb->UrbIsochronousTransfer.TransferBuffer, + (streamObject->FramesPerBuffer * streamObject->PacketSize)); + + + // + // If no errors occured, re-initialize and re-submit the IRP/URB + // + if (NT_SUCCESS(Irp->IoStatus.Status) && !pdx->StopIsoStream) + { + + urbSize = GET_ISO_URB_SIZE(streamObject->FramesPerBuffer); + RtlZeroMemory(urb,urbSize); + + urb->UrbHeader.Length = urbSize; + urb->UrbHeader.Function = URB_FUNCTION_ISOCH_TRANSFER; + urb->UrbIsochronousTransfer.PipeHandle = streamObject->PipeInfo->PipeHandle; + urb->UrbIsochronousTransfer.TransferFlags = + USB_ENDPOINT_DIRECTION_IN(streamObject->PipeInfo->EndpointAddress) ? USBD_TRANSFER_DIRECTION_IN : 0; + urb->UrbIsochronousTransfer.TransferFlags |= + USBD_START_ISO_TRANSFER_ASAP; + urb->UrbIsochronousTransfer.TransferFlags |= + USBD_SHORT_TRANSFER_OK; + urb->UrbIsochronousTransfer.TransferBufferLength = + streamObject->PacketSize * streamObject->FramesPerBuffer; + urb->UrbIsochronousTransfer.TransferBuffer = + ((PUCHAR) streamObject->TransferBuffer) + (transferObject->Frame * streamObject->PacketSize); + urb->UrbIsochronousTransfer.NumberOfPackets = streamObject->FramesPerBuffer; + + for (i=0; iFramesPerBuffer; i++) + { + urb->UrbIsochronousTransfer.IsoPacket[i].Offset = i * streamObject->PacketSize; + urb->UrbIsochronousTransfer.IsoPacket[i].Length = streamObject->PacketSize; + } + + // + // initialize the IRP for the next transfer + // cuz lynn says I hafta + // + IoInitializeIrp(Irp, + IoSizeOfIrp((pdx->StackDeviceObject->StackSize + 1)), + (CCHAR)(pdx->StackDeviceObject->StackSize + 1)); + + nextStack = IoGetNextIrpStackLocation(Irp); + + nextStack->Parameters.Others.Argument1 = transferObject->Urb; + nextStack->Parameters.DeviceIoControl.IoControlCode = + IOCTL_INTERNAL_USB_SUBMIT_URB; + nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; + + IoSetCompletionRoutine(Irp, + IsoStreamTransferComplete, + transferObject, + TRUE, + TRUE, + TRUE); + + // + // submit the request + // + status = IoCallDriver(pdx->StackDeviceObject,Irp); + //Ezusb_KdPrint(("IsoTransferComplete Resubmit Irp Status 0x%x\n",status)); + ntStatus = STATUS_MORE_PROCESSING_REQUIRED; + } + else + { + Ezusb_KdPrint(("IsoTransferComplete All done, setting event\n")); + + IoFreeIrp(Irp); + ExFreePool(urb); + + streamObject->PendingTransfers--; + if (streamObject->PendingTransfers == 0) + { + ExFreePool(streamObject->TransferBuffer); + ExFreePool(streamObject->TransferObject); + FreeRingBuffer(streamObject->DataRingBuffer); + pdx->DataRingBuffer = NULL; + FreeRingBuffer(streamObject->DescriptorRingBuffer); + pdx->DescriptorRingBuffer = NULL; + + ExFreePool(streamObject); + } + + ntStatus = STATUS_MORE_PROCESSING_REQUIRED; + } + + return ntStatus; +} + +NTSTATUS Ezusb_StartIsoStream( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ) +{ + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation (Irp); + PISO_TRANSFER_CONTROL isoControl = + (PISO_TRANSFER_CONTROL)Irp->AssociatedIrp.SystemBuffer; + PUSBD_INTERFACE_INFORMATION interfaceInfo = NULL; + PUSBD_PIPE_INFORMATION pipeInfo = NULL; + USBD_PIPE_HANDLE pipeHandle = NULL; + PISO_STREAM_OBJECT streamObject; + ULONG i; + + // + // verify that the selected pipe is valid, and get a handle to it. If anything + // is wrong, return an error + // + interfaceInfo = pdx->Interface; + + if (!interfaceInfo) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() no interface info - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + if (isoControl->PipeNum > interfaceInfo->NumberOfPipes) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeInfo = &(interfaceInfo->Pipes[isoControl->PipeNum]); + + if (!(pipeInfo->PipeType == UsbdPipeTypeIsochronous)) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() invalid pipe - Exiting\n")); + return STATUS_INVALID_PARAMETER; + } + + pipeHandle = pipeInfo->PipeHandle; + + if (!pipeHandle) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() invalid pipe - Exiting\n")); + return STATUS_UNSUCCESSFUL; + } + + // + // Allocate the streamObject + // + streamObject = ExAllocatePool(NonPagedPool, sizeof(ISO_STREAM_OBJECT)); + + if (!streamObject) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate stream object - Exiting\n")); + return STATUS_NO_MEMORY; + } + + // + // FramesPerBuffer specifies how many frames of ISO data are transferred + // by a single URB. This field corresponds to the NumberOfPackets + // field in the ISO transfer URB (_URB_ISOCH_TRANSFER) + // +// MDNISO streamObject->PendingTransfers = + streamObject->FramesPerBuffer = isoControl->FramesPerBuffer; + + // + // BufferCount specifies how many IRP's are queued to carry out an ISO transfer. + // + streamObject->PendingTransfers = + streamObject->BufferCount = isoControl->BufferCount; + + streamObject->DeviceObject = fdo; + streamObject->PipeInfo = pipeInfo; + streamObject->PacketSize = isoControl->PacketSize; + streamObject->TransferBufferLength = streamObject->PacketSize * streamObject->FramesPerBuffer * streamObject->BufferCount; + streamObject->TransferBuffer = ExAllocatePool(NonPagedPool, streamObject->TransferBufferLength); + if (!streamObject->TransferBuffer) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate transfer buffer - Exiting\n")); + return STATUS_NO_MEMORY; + } + + streamObject->DataRingBuffer = AllocRingBuffer(isoControl->PacketCount * isoControl->PacketSize); + if (!streamObject->DataRingBuffer) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate data ring buffer - Exiting\n")); + return STATUS_NO_MEMORY; + } + pdx->DataRingBuffer = streamObject->DataRingBuffer; + + streamObject->DescriptorRingBuffer = + AllocRingBuffer(isoControl->PacketCount * sizeof(USBD_ISO_PACKET_DESCRIPTOR)); + if (!streamObject->DescriptorRingBuffer) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate descriptor ring buffer - Exiting\n")); + return STATUS_NO_MEMORY; + } + pdx->DescriptorRingBuffer = streamObject->DescriptorRingBuffer; + + streamObject->TransferObject = ExAllocatePool(NonPagedPool, + sizeof(ISO_TRANSFER_OBJECT) * streamObject->BufferCount); + + if (!streamObject->TransferObject) + { + Ezusb_KdPrint(("Ezusb_StartIsoTransfer() unable to allocate transfer object - Exiting\n")); + return STATUS_NO_MEMORY; + } + + for (i=0; i < streamObject->BufferCount; i++) + { + InitTransferObject(streamObject,i); + + // + // override the completion routine that InitTransferObject registered + // + IoSetCompletionRoutine(streamObject->TransferObject[i].Irp, + IsoStreamTransferComplete, + &streamObject->TransferObject[i], + TRUE, + TRUE, + TRUE); + + + } + + pdx->StopIsoStream = FALSE; + + for (i=0; i < streamObject->BufferCount; i++) + { + IoCallDriver(pdx->StackDeviceObject, + streamObject->TransferObject[i].Irp); + } + + return STATUS_SUCCESS; +} + +NTSTATUS InitTransferObject( + IN OUT PISO_STREAM_OBJECT streamObject, + IN ULONG index + ) +{ + PISO_TRANSFER_OBJECT transferObject = &streamObject->TransferObject[index]; + PUSBD_PIPE_INFORMATION pipeInfo = streamObject->PipeInfo; + USHORT urbSize = 0; + CCHAR stackSize; + PIO_STACK_LOCATION nextStack = NULL; + PURB urb = NULL; + PIRP irp = NULL; + PDEVICE_EXTENSION pdx = + (PDEVICE_EXTENSION) streamObject->DeviceObject->DeviceExtension; + ULONG i; + + + // + // allocate and prepare the URB + // + urbSize = GET_ISO_URB_SIZE(streamObject->FramesPerBuffer); + + urb = ExAllocatePool(NonPagedPool, urbSize); + RtlZeroMemory(urb,urbSize); + + urb->UrbHeader.Length = urbSize; + urb->UrbHeader.Function = URB_FUNCTION_ISOCH_TRANSFER; + urb->UrbIsochronousTransfer.PipeHandle = pipeInfo->PipeHandle; + urb->UrbIsochronousTransfer.TransferFlags = + USB_ENDPOINT_DIRECTION_IN(pipeInfo->EndpointAddress) ? USBD_TRANSFER_DIRECTION_IN : 0; + urb->UrbIsochronousTransfer.TransferFlags |= + USBD_START_ISO_TRANSFER_ASAP; + urb->UrbIsochronousTransfer.TransferFlags |= + USBD_SHORT_TRANSFER_OK; + urb->UrbIsochronousTransfer.TransferBufferLength = + streamObject->PacketSize * streamObject->FramesPerBuffer; + urb->UrbIsochronousTransfer.TransferBuffer = + ((PUCHAR) streamObject->TransferBuffer) + (index * streamObject->PacketSize * streamObject->FramesPerBuffer); + + urb->UrbIsochronousTransfer.NumberOfPackets = streamObject->FramesPerBuffer; + + // + // setup the ISO packet descriptors + // + for (i=0; iFramesPerBuffer; i++) + { + urb->UrbIsochronousTransfer.IsoPacket[i].Offset = i * streamObject->PacketSize; + urb->UrbIsochronousTransfer.IsoPacket[i].Length = streamObject->PacketSize; + } + + stackSize = (CCHAR) (pdx->StackDeviceObject->StackSize + 1); + + // + // allocate and prepare the IRP + // + irp = IoAllocateIrp(stackSize, FALSE); + IoInitializeIrp(irp, irp->Size, stackSize); + + nextStack = IoGetNextIrpStackLocation(irp); + + nextStack->Parameters.Others.Argument1 = urb; + nextStack->Parameters.DeviceIoControl.IoControlCode = + IOCTL_INTERNAL_USB_SUBMIT_URB; + nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; + + IoSetCompletionRoutine(irp, + IsoTransferComplete, + transferObject, + TRUE, + TRUE, + TRUE); + + transferObject->Frame = index * streamObject->FramesPerBuffer; + transferObject->Urb = urb; + transferObject->Irp = irp; + transferObject->StreamObject = streamObject; + KeInitializeEvent(&transferObject->Done, NotificationEvent, FALSE); + + return STATUS_SUCCESS; +} + +NTSTATUS Ezusb_8051Reset( + PDEVICE_OBJECT fdo, + UCHAR resetBit + ) +/*++ + +Routine Description: + Uses the ANCHOR LOAD vendor specific command to either set or release the + 8051 reset bit in the EZ-USB chip. + +Arguments: + fdo - pointer to the device object for this instance of an Ezusb Device + resetBit - 1 sets the 8051 reset bit (holds the 8051 in reset) + 0 clears the 8051 reset bit (8051 starts running) + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus; + PURB urb = NULL; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + if (urb) + { + + // toggle the EZ-USB reset bit (harmless on FX2) + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferBufferLength = 1; + urb->UrbControlVendorClassRequest.TransferBuffer = &resetBit; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_INTERNAL; + urb->UrbControlVendorClassRequest.Value = CPUCS_REG_EZUSB; + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + // toggle the FX2 reset bit (harmless on EZ-USB) + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferBufferLength = 1; + urb->UrbControlVendorClassRequest.TransferBuffer = &resetBit; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_INTERNAL; + urb->UrbControlVendorClassRequest.Value = CPUCS_REG_FX2; + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + if (urb) + ExFreePool(urb); + + return ntStatus; +} + +// +// this is the number of bytes of firmware to download per setup transfer. +// +#define CHUNK_SIZE 64 + +NTSTATUS Ezusb_AnchorDownload( + PDEVICE_OBJECT fdo, + WORD offset, + PUCHAR downloadBuffer, + ULONG downloadSize + ) +/*++ + +Routine Description: + Uses the ANCHOR LOAD vendor specific command to download code to the EZ-USB + device. The actual code is stored as data within the driver binary in the + global 'firmware' which is an EZUSB_FIRMWARE struct included in the file + firmware.c. + +Arguments: + fdo - pointer to the device object for this instance of an Ezusb Device + downloadBuffer - pointer to the firmware image + downloadSize - total size (bytes) of the firmware image to download + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus; + PURB urb = NULL; + int i; + int chunkCount; + PUCHAR ptr = downloadBuffer; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + if (urb) + { + chunkCount = ((downloadSize + CHUNK_SIZE - 1) / CHUNK_SIZE); + // + // The download will be split into CHUNK_SIZE pieces and + // downloaded with multiple setup transfers. For the Rev B parts + // CHUNK_SIZE should not exceed 64 bytes, as larger transfers can + // result in data corruption when other USB devices are present. + // + for (i = 0; i < chunkCount; i++) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferBufferLength = + ((i == (chunkCount - 1)) && (downloadSize % CHUNK_SIZE)) ? + (downloadSize % CHUNK_SIZE) : + CHUNK_SIZE; + + urb->UrbControlVendorClassRequest.TransferBuffer = ptr; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_INTERNAL; + urb->UrbControlVendorClassRequest.Value = (i * CHUNK_SIZE) + offset; + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (!NT_SUCCESS(ntStatus)) + break; + + ptr += CHUNK_SIZE; + } + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + if (urb) + ExFreePool(urb); + + return ntStatus; +} + +NTSTATUS Ezusb_DownloadIntelHex( + PDEVICE_OBJECT fdo, + PINTEL_HEX_RECORD hexRecord + ) +/*++ + +Routine Description: + This function downloads Intel Hex Records to the EZ-USB device. If any of the hex records + are destined for external RAM, then the caller must have previously downloaded firmware + to the device that knows how to download to external RAM (ie. firmware that implements + the ANCHOR_LOAD_EXTERNAL vendor specific command). + +Arguments: + fdo - pointer to the device object for this instance of an Ezusb Device + hexRecord - pointer to an array of INTEL_HEX_RECORD structures. This array + is terminated by an Intel Hex End record (Type = 1). + +Return Value: + STATUS_SUCCESS if successful, + STATUS_UNSUCCESSFUL otherwise + +--*/ +{ + NTSTATUS ntStatus; + PURB urb = NULL; + PINTEL_HEX_RECORD ptr = hexRecord; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + if (urb) + { + // + // The download must be performed in two passes. The first pass loads all of the + // external addresses, and the 2nd pass loads to all of the internal addresses. + // why? because downloading to the internal addresses will probably wipe out the firmware + // running on the device that knows how to receive external ram downloads. + // + // + // First download all the records that go in external ram + // + while (ptr->Type == 0) + { + if (!INTERNAL_RAM(ptr->Address)) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + urb->UrbControlVendorClassRequest.TransferBufferLength = ptr->Length; + urb->UrbControlVendorClassRequest.TransferBuffer = ptr->Data; + urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_EXTERNAL; + urb->UrbControlVendorClassRequest.Value = ptr->Address; + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (!NT_SUCCESS(ntStatus)) + break; + } + ptr++; + } + + // + // Now download all of the records that are in internal RAM. Before starting + // the download, stop the 8051. + // + Ezusb_8051Reset(fdo,1); + ptr = hexRecord; + while (ptr->Type == 0) + { + if (INTERNAL_RAM(ptr->Address)) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + urb->UrbControlVendorClassRequest.TransferBufferLength = ptr->Length; + urb->UrbControlVendorClassRequest.TransferBuffer = ptr->Data; + urb->UrbControlVendorClassRequest.Request = ANCHOR_LOAD_INTERNAL; + urb->UrbControlVendorClassRequest.Value = ptr->Address; + urb->UrbControlVendorClassRequest.Index = 0; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + if (!NT_SUCCESS(ntStatus)) + break; + } + ptr++; + } + + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + if (urb) + ExFreePool(urb); + + return ntStatus; +} + +PRING_BUFFER +AllocRingBuffer( + ULONG Size + ) +{ + PRING_BUFFER ringBuffer = NULL; + + ringBuffer = ExAllocatePool(NonPagedPool, sizeof(RING_BUFFER)); + + if (!ringBuffer) + return NULL; + + ringBuffer->buffer = ExAllocatePool(NonPagedPool, Size); + + if (!ringBuffer->buffer) + { + ExFreePool(ringBuffer); + return NULL; + } + + ringBuffer->inPtr = ringBuffer->buffer; + ringBuffer->outPtr = ringBuffer->buffer; + ringBuffer->totalSize = Size; + ringBuffer->currentSize = 0; + + KeInitializeSpinLock(&ringBuffer->spinLock); + + return ringBuffer; +} + +VOID +FreeRingBuffer( + PRING_BUFFER ringBuffer + ) +{ + ExFreePool(ringBuffer->buffer); + ExFreePool(ringBuffer); +} + +ULONG +ReadRingBuffer( + PRING_BUFFER ringBuffer, + PUCHAR readBuffer, + ULONG numberOfBytesToRead + ) +/* + Routine Description: + This routine reads data from a ring buffer. + + Arguments: + ringBuffer - pointer to a ring buffer structure + readBuffer - pointer to a user supplied buffer to transfer data into + numberOfBytesToRead - number of bytes to read from the ring buffer + + Return Value: + ULONG - number of bytes read. May be smaller than requested number of bytes. +*/ +{ + ULONG byteCount; + KIRQL oldIrql; + + Ezusb_KdPrint(( "ReadRingBuffer() enter\n")); + + if (numberOfBytesToRead > ringBuffer->totalSize) + return 0; + + if (ringBuffer->currentSize == 0) + return 0; + + if ( numberOfBytesToRead > ringBuffer->currentSize ) + byteCount = ringBuffer->currentSize; + else + byteCount = numberOfBytesToRead; + + // + // two cases. Read either wraps or it doesn't. + // Handle the non-wrapped case first + // + if ((ringBuffer->outPtr + byteCount - 1) < + (ringBuffer->buffer + ringBuffer->totalSize)) + { + Ezusb_KdPrint(( "ReadRingBuffer() about to copy a\n")); + RtlCopyMemory(readBuffer, ringBuffer->outPtr, byteCount); + ringBuffer->outPtr += byteCount; + if (ringBuffer->outPtr == ringBuffer->buffer + ringBuffer->totalSize) + ringBuffer->outPtr = ringBuffer->buffer; + } + // now handle the wrapped case + else + { + ULONG fragSize; + + Ezusb_KdPrint(( "ReadRingBuffer() about to copy b\n")); + // get the first half of the read + fragSize = ringBuffer->buffer + ringBuffer->totalSize - ringBuffer->outPtr; + RtlCopyMemory(readBuffer, ringBuffer->outPtr, fragSize); + + // now get the rest + RtlCopyMemory(readBuffer + fragSize, ringBuffer->buffer, byteCount - fragSize); + + ringBuffer->outPtr = ringBuffer->buffer + byteCount - fragSize; + } + + // + // update the current size of the ring buffer. Use spinlock to insure + // atomic operation. + // + KeAcquireSpinLock(&ringBuffer->spinLock, &oldIrql); + ringBuffer->currentSize -= byteCount; + KeReleaseSpinLock(&ringBuffer->spinLock, oldIrql); + + Ezusb_KdPrint(( "ReadRingBuffer() exit\n")); + + return byteCount; +} + +ULONG +WriteRingBuffer( + PRING_BUFFER ringBuffer, + PUCHAR writeBuffer, + ULONG numberOfBytesToWrite + ) +/* + Routine Description: + This routine writes data to a ring buffer. If the requested write size exceeds + available space in the ring buffer, then the write is rejected. + + Arguments: + ringBuffer - pointer to a ring buffer structure + readBuffer - pointer to a user supplied buffer of data to copy to the ring buffer + numberOfBytesToRead - number of bytes to write to the ring buffer + + Return Value: + ULONG - number of bytes written. +*/ +{ + ULONG byteCount; + KIRQL oldIrql; + + if ( numberOfBytesToWrite > + (ringBuffer->totalSize - ringBuffer->currentSize) ) + { + Ezusb_KdPrint(( "WriteRingBuffer() OVERFLOW\n")); + return 0; + } + + byteCount = numberOfBytesToWrite; + + // + // two cases. Write either wraps or it doesn't. + // Handle the non-wrapped case first + // + if ((ringBuffer->inPtr + byteCount - 1) < + (ringBuffer->buffer + ringBuffer->totalSize)) + { + RtlCopyMemory(ringBuffer->inPtr, writeBuffer, byteCount); + ringBuffer->inPtr += byteCount; + if (ringBuffer->inPtr == ringBuffer->buffer + ringBuffer->totalSize) + ringBuffer->inPtr = ringBuffer->buffer; + } + // now handle the wrapped case + else + { + ULONG fragSize; + + // write the first fragment + fragSize = ringBuffer->buffer + ringBuffer->totalSize - ringBuffer->inPtr; + RtlCopyMemory(ringBuffer->inPtr, writeBuffer, fragSize); + + // now write the rest + RtlCopyMemory(ringBuffer->buffer, writeBuffer + fragSize, byteCount - fragSize); + + ringBuffer->inPtr = ringBuffer->buffer + byteCount - fragSize; + } + + // + // update the current size of the ring buffer. Use spinlock to insure + // atomic operation. + // + KeAcquireSpinLock(&ringBuffer->spinLock, &oldIrql); + ringBuffer->currentSize += byteCount; + KeReleaseSpinLock(&ringBuffer->spinLock, oldIrql); + + return byteCount; +} + +BOOLEAN IsFx2( + IN PDEVICE_OBJECT fdo + ) +/* + Routine Description: + This routine queries the device via a SETUP command to determine if it is + an FX2 chip. In order for this to work, the device must implement the vendor + specific IN SETUP command 0xAC, which returns 1 if the chip is FX2 and 0 + otherwise. + + Arguments: + fdo - our device object + + Return Value: + BOOL - TRUE if FX2, FALSE otherwise +*/ +{ + NTSTATUS ntStatus; + PURB urb = NULL; + UCHAR transferBuffer[64]; + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + if (urb) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_VENDOR_DEVICE; + + urb->UrbControlVendorClassRequest.TransferFlags = USBD_TRANSFER_DIRECTION_IN ; + urb->UrbControlVendorClassRequest.TransferBufferLength = 1; + urb->UrbControlVendorClassRequest.TransferBuffer = transferBuffer; + urb->UrbControlVendorClassRequest.TransferBufferMDL = NULL; + urb->UrbControlVendorClassRequest.Request = ANCHOR_ISFX2; + urb->UrbControlVendorClassRequest.Value = 0; + urb->UrbControlVendorClassRequest.Index = 0; + + Ezusb_KdPrint (("**** About to query ISFX2\n")); + + ntStatus = Ezusb_CallUSBD(fdo, urb); + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + if (urb) + ExFreePool(urb); + + if (transferBuffer[0] == 1) + { + return TRUE; + } + else + { + return FALSE; + } +} + +NTSTATUS Ezusb_SetFeature( + IN PDEVICE_OBJECT fdo, + IN PSET_FEATURE_CONTROL setFeatureControl + ) +/* + Routine Description: + This routine performs a Set Feature control transfer + + Arguments: + fdo - our device object + setFeatureControl - a data structure that contains the arguments for the + set featire command + + Return Value: + NTSTATUS +*/ +{ + NTSTATUS ntStatus = STATUS_SUCCESS; + PURB urb = NULL; + ULONG length = 0; + PDEVICE_EXTENSION pdx = fdo->DeviceExtension; + + Ezusb_KdPrint (("Enter Ezusb_SetFeature\n")); + + urb = ExAllocatePool(NonPagedPool, + sizeof(struct _URB_CONTROL_FEATURE_REQUEST)); + + if (urb) + { + RtlZeroMemory(urb,sizeof(struct _URB_CONTROL_FEATURE_REQUEST)); + + urb->UrbHeader.Length = sizeof(struct _URB_CONTROL_FEATURE_REQUEST); + urb->UrbHeader.Function = URB_FUNCTION_SET_FEATURE_TO_DEVICE; + + urb->UrbControlFeatureRequest.FeatureSelector = setFeatureControl->FeatureSelector; + urb->UrbControlFeatureRequest.Index = setFeatureControl->Index; + + ntStatus = Ezusb_CallUSBD(fdo, urb); + + } + else + { + ntStatus = STATUS_NO_MEMORY; + } + + Ezusb_KdPrint (("Leaving Ezusb_SetFeature\n")); + + return ntStatus; +} \ No newline at end of file diff --git a/iidx/ezusb/driver/src/ezusbsys.h b/iidx/ezusb/driver/src/ezusbsys.h new file mode 100755 index 0000000..adbd3eb --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.h @@ -0,0 +1,1150 @@ +////////////////////////////////////////////////////////////////////// +// +// File: ezusbsys.h +// $Archive: /USB/Drivers/ezusbdrv/ezusbsys.h $ +// +// Purpose: +// Header file for the Ezusb USB Device Driver +// +// Environment: +// kernel mode +// +// $Author: Mdn $ +// +// $History: ezusbsys.h $ +// +// ***************** Version 5 ***************** +// User: Mdn Date: 10/06/00 Time: 10:08a +// Updated in $/USB/Drivers/ezusbdrv +// Added IOCTL_EZUSB_SET_FEATURE +// +// ***************** Version 4 ***************** +// User: Mdn Date: 8/17/00 Time: 9:46a +// Updated in $/USB/Drivers/ezusbdrv +// added a generic get descriptor function. +// +// ***************** Version 3 ***************** +// User: Mdn Date: 8/04/00 Time: 11:40a +// Updated in $/USB/Drivers/ezmon +// added support for monitor download to FX2 +// +// ***************** Version 2 ***************** +// User: Mdn Date: 7/21/00 Time: 4:27p +// Updated in $/USB/Drivers/ezusbdrv +// Added a Started flag to the device extension. This flag gets set after +// the device has successfully Started. It is used to prevent a potential +// race condition where an application could get a handle (with +// CreateFile()) before the device is completely enumerated. +// +// ***************** Version 1 ***************** +// User: Tpm Date: 6/09/00 Time: 6:32p +// Created in $/USB/Drivers/ezusbdrv +// +// ***************** Version 30 ***************** +// User: Tpm Date: 3/14/00 Time: 4:14p +// Updated in $/EzUsb/Examples/Unsupported/EzMr +// Added commets: +// DEVIOCTL.H is a Microsoft header file. +// DEVIOCTL.H is normally obtained by installing the Windows DDK. +// +// ***************** Version 29 ***************** +// User: Markm Date: 5/18/99 Time: 3:37p +// Updated in $/EzUsb/Drivers/ezusbdrv +// +// ***************** Version 28 ***************** +// User: Markm Date: 2/23/99 Time: 9:50a +// Updated in $/EzUsb/Drivers/ezusbdrv +// Driver now supports ISO IN streaming with a path to user mode. +// +// ***************** Version 27 ***************** +// User: Markm Date: 2/10/99 Time: 3:32p +// Updated in $/EzUsb/Drivers/ezusbdrv +// removed lots of unused protoypes and structures. Added ring buffer +// support functions. +// +// ***************** Version 26 ***************** +// User: Markm Date: 2/01/99 Time: 11:57a +// Updated in $/EzUsb/Drivers/ezusbdrv +// Added preliminary support for ISO streaming. +// +// ***************** Version 25 ***************** +// User: Tpm Date: 10/19/98 Time: 3:45p +// Updated in $/EzUsb/Examples/CTst +// Fix RMA#1 bug: side B fails renum. +// +// ***************** Version 24 ***************** +// User: Tpm Date: 10/01/98 Time: 11:51p +// Updated in $/EzUsb/Examples/Unsupported/EzMr +// Apply Tim's Comments. +// +// ***************** Version 23 ***************** +// User: Tpm Date: 6/26/98 Time: 10:27a +// Updated in $/EzUsb/Examples/EzMr +// Set Version. +// +// ***************** Version 22 ***************** +// User: Tpm Date: 6/26/98 Time: 5:41a +// Updated in $/EzUsb/Examples/EzMr +// Pre-Build. +// +// ***************** Version 21 ***************** +// User: Tpm Date: 6/26/98 Time: 4:01a +// Updated in $/EzUsb/Examples/CTst +// Clean Build. +// +// ***************** Version 20 ***************** +// User: Tpm Date: 6/26/98 Time: 2:41a +// Updated in $/EzUsb/Examples/EzMr +// Clean Build. +// +// ***************** Version 19 ***************** +// User: Tpm Date: 6/25/98 Time: 1:09p +// Updated in $/EzUsb/EzMr +// Add Headers. +// +// ***************** Version 18 ***************** +// User: Tpm Date: 6/25/98 Time: 10:50a +// Updated in $/EzUsb/EzMr +// REL1.1. +// +// ***************** Version 17 ***************** +// User: Markm Date: 4/09/98 Time: 3:01p +// Updated in $/EZUSB/ezusb driver +// Added stuff to support download of Intel Hex records. +// +// ***************** Version 16 ***************** +// User: Markm Date: 4/07/98 Time: 1:53p +// Updated in $/EZUSB/ezusb driver +// Added IOCTL_EZUSB_GET_DRIVER_VERSION +// +// ***************** Version 15 ***************** +// User: Markm Date: 4/06/98 Time: 4:27p +// Updated in $/EZUSB/ezusb driver +// Modified ISO transfer code. +// * Transfer descriptors for the ISO transfer are now sent up to the +// caller along with the actual data, so the caller can get the status of +// the transfer on a packet-by-packet basis. +// * Disabled default values. Caller must specify all fields in the ISO +// control structure. +// * Corrected bug where the Stream and Transfer objects weren't being +// freed. +// +// Added some code to measure the latency of a bulk transfer. +// +// ***************** Version 14 ***************** +// User: Markm Date: 3/19/98 Time: 10:13a +// Updated in $/EZUSB/ezusb driver +// Added IOCTL_EZUSB_ANCHOR_DOWNLOAD to support A0 loads to a specific +// memory offset. +// +// ***************** Version 13 ***************** +// User: Markm Date: 2/26/98 Time: 4:05p +// Updated in $/EZUSB/ezusb driver +// Added protoypes for anchor download and 8051 reset functions. +// Added firmware structure definition. +// Added some EZ-USB register defines. +// +// ***************** Version 11 ***************** +// User: Markm Date: 2/11/98 Time: 9:51a +// Updated in $/EZUSB/ezusb driver +// Added an open file handle count to the device extension. +// +// ***************** Version 10 ***************** +// User: Markm Date: 2/02/98 Time: 3:36p +// Updated in $/EZUSB/ezusb driver +// Added protypes for new functions +// +// ***************** Version 9 ***************** +// User: Markm Date: 1/27/98 Time: 11:37a +// Updated in $/EZUSB/ezusb driver +// Added members to the ISO stream object to allow for user specified +// transfer parameters. +// +// ***************** Version 8 ***************** +// User: Markm Date: 1/22/98 Time: 11:52a +// Updated in $/EZUSB/ezusb driver +// removed unused code. +// added IOCTL's for ISO loopback/read/write +// +// ***************** Version 7 ***************** +// User: Markm Date: 1/18/98 Time: 3:18p +// Updated in $/EZUSB/ezusb driver +// Added new IOCTL's. Added members to the device extension to support +// robust device removal. +// +// ***************** Version 6 ***************** +// User: Markm Date: 1/14/98 Time: 10:30a +// Updated in $/EZUSB/ezusb driver +// Added IOCTL's for handling bulk transfers. +// +// ***************** Version 5 ***************** +// User: Markm Date: 1/02/98 Time: 1:41p +// Updated in $/EZUSB/ezusb driver +// Added support for setting the interface, preliminary code for naming +// pipes, get string descriptor +// +// ***************** Version 4 ***************** +// User: Markm Date: 11/18/97 Time: 3:21p +// Updated in $/EZUSB/ezusb driver +// added abort pipe IOCTL +// +// ***************** Version 3 ***************** +// User: Markm Date: 11/14/97 Time: 4:31p +// Updated in $/EZUSB/ezusb driver +// added code to experiment wth different methods of switiching +// interfaces. +// +// ***************** Version 2 ***************** +// User: Markm Date: 11/07/97 Time: 1:21p +// Updated in $/EZUSB/ezusb driver +// Added Reset Pipe IOCTL +// +// Copyright (c) 1997 Anchor Chips, Inc. May not be reproduced without +// permission. See the license agreement for more details. +// +////////////////////////////////////////////////////////////////////// + +#define DRIVER + +// +// Vendor specific request code for Anchor Upload/Download +// +// This one is implemented in the core +// +#define ANCHOR_LOAD_INTERNAL 0xA0 + +// +// These commands are not implemented in the core. Requires firmware +// +#define ANCHOR_LOAD_EXTERNAL 0xA3 +#define ANCHOR_ISFX2 0xAC + +// +// This is the highest internal RAM address for the AN2131Q +// +#define MAX_INTERNAL_ADDRESS 0x1B3F + +#define INTERNAL_RAM(address) ((address <= MAX_INTERNAL_ADDRESS) ? 1 : 0) +// +// EZ-USB Control and Status Register. Bit 0 controls 8051 reset +// +#define CPUCS_REG_EZUSB 0x7F92 +#define CPUCS_REG_FX2 0xE600 + + +#ifndef _BYTE_DEFINED +#define _BYTE_DEFINED +typedef unsigned char BYTE; +#endif // !_BYTE_DEFINED + +#ifndef _WORD_DEFINED +#define _WORD_DEFINED +typedef unsigned short WORD; +#endif // !_WORD_DEFINED + +typedef struct _VENDOR_REQUEST_IN +{ + BYTE bRequest; + WORD wValue; + WORD wIndex; + WORD wLength; + BYTE direction; + BYTE bData; +} VENDOR_REQUEST_IN, *PVENDOR_REQUEST_IN; + +/////////////////////////////////////////////////////////// +// +// control structure for bulk and interrupt data transfers +// +/////////////////////////////////////////////////////////// +typedef struct _BULK_TRANSFER_CONTROL +{ + ULONG pipeNum; +} BULK_TRANSFER_CONTROL, *PBULK_TRANSFER_CONTROL; + +typedef struct _BULK_LATENCY_CONTROL +{ + ULONG bulkPipeNum; + ULONG intPipeNum; + ULONG loops; +} BULK_LATENCY_CONTROL, *PBULK_LATENCY_CONTROL; + + +/////////////////////////////////////////////////////////// +// +// control structure isochronous loopback test +// +/////////////////////////////////////////////////////////// +typedef struct _ISO_LOOPBACK_CONTROL +{ + // iso pipe to write to + ULONG outPipeNum; + + // iso pipe to read from + ULONG inPipeNum; + + // amount of data to read/write from/to the pipe each frame. If not + // specified, the MaxPacketSize of the out pipe is used. + ULONG packetSize; + +} ISO_LOOPBACK_CONTROL, *PISO_LOOPBACK_CONTROL; + +/////////////////////////////////////////////////////////// +// +// control structure for sending vendor or class specific requests +// to the control endpoint. +// +/////////////////////////////////////////////////////////// +typedef struct _VENDOR_OR_CLASS_REQUEST_CONTROL +{ + // transfer direction (0=host to device, 1=device to host) + UCHAR direction; + + // request type (1=class, 2=vendor) + UCHAR requestType; + + // recipient (0=device,1=interface,2=endpoint,3=other) + UCHAR recepient; + // + // see the USB Specification for an explanation of the + // following paramaters. + // + UCHAR requestTypeReservedBits; + UCHAR request; + USHORT value; + USHORT index; +} VENDOR_OR_CLASS_REQUEST_CONTROL, *PVENDOR_OR_CLASS_REQUEST_CONTROL; + +typedef struct _SET_FEATURE_CONTROL +{ + USHORT FeatureSelector; + USHORT Index; +} SET_FEATURE_CONTROL, *PSET_FEATURE_CONTROL; + +/////////////////////////////////////////////////////////// +// +// control structure for isochronous data transfers +// +/////////////////////////////////////////////////////////// +typedef struct _ISO_TRANSFER_CONTROL +{ + // + // pipe number to perform the ISO transfer to/from. Direction is + // implied by the pipe number. + // + ULONG PipeNum; + // + // ISO packet size. Determines how much data is transferred each + // frame. Should be less than or equal to the maxpacketsize for + // the endpoint. + // + ULONG PacketSize; + // + // Total number of ISO packets to transfer. + // + ULONG PacketCount; + // + // The following two parameters detmine how buffers are managed for + // an ISO transfer. In order to maintain an ISO stream, the driver + // must create at least 2 transfer buffers and ping pong between them. + // BufferCount determines how many buffers the driver creates to ping + // pong between. FramesPerBuffer specifies how many USB frames of data + // are transferred by each buffer. + // + ULONG FramesPerBuffer; // 10 is a good value + ULONG BufferCount; // 2 is a good value +} ISO_TRANSFER_CONTROL, *PISO_TRANSFER_CONTROL; + + +/////////////////////////////////////////////////////////// +// +// control structure for Anchor Downloads +// +/////////////////////////////////////////////////////////// +typedef struct _ANCHOR_DOWNLOAD_CONTROL +{ + WORD Offset; +} ANCHOR_DOWNLOAD_CONTROL, *PANCHOR_DOWNLOAD_CONTROL; + +#define MAX_INTEL_HEX_RECORD_LENGTH 16 + +typedef struct _INTEL_HEX_RECORD +{ + BYTE Length; + WORD Address; + BYTE Type; + BYTE Data[MAX_INTEL_HEX_RECORD_LENGTH]; +} INTEL_HEX_RECORD, *PINTEL_HEX_RECORD; + +typedef struct _SET_INTERFACE_IN +{ + UCHAR interfaceNum; + UCHAR alternateSetting; +} SET_INTERFACE_IN, *PSET_INTERFACE_IN; + +typedef struct _GET_STRING_DESCRIPTOR_IN +{ + UCHAR Index; + USHORT LanguageId; +} GET_STRING_DESCRIPTOR_IN, *PGET_STRING_DESCRIPTOR_IN; + +typedef struct _EZUSB_DRIVER_VERSION +{ + WORD MajorVersion; + WORD MinorVersion; + WORD BuildVersion; +} EZUSB_DRIVER_VERSION, *PEZUSB_DRIVER_VERSION; + +#ifdef DRIVER + +typedef struct _RING_BUFFER +{ + PUCHAR inPtr; + PUCHAR outPtr; + ULONG totalSize; + ULONG currentSize; + KSPIN_LOCK spinLock; + PUCHAR buffer; +} RING_BUFFER, *PRING_BUFFER; + +PRING_BUFFER +AllocRingBuffer( + ULONG Size + ); + +VOID +FreeRingBuffer( + PRING_BUFFER ringBuffer + ); + +ULONG +ReadRingBuffer( + PRING_BUFFER ringBuffer, + PUCHAR readBuffer, + ULONG numberOfBytesToRead + ); + +ULONG +WriteRingBuffer( + PRING_BUFFER ringBuffer, + PUCHAR writeBuffer, + ULONG numberOfBytesToWrite + ); + +typedef struct _EZUSB_FIRMWARE +{ + // tag contains a string to identify the start of the firmware + // image in the driver binary. Another utilty can then be used + // to replace the firmware image inthe driver without requiring + // a recompile + UCHAR tag[10]; + ULONG size; + UCHAR firmware[]; +} EZUSB_FIRMWARE, *PEZUSB_FIRMWARE; + +// +// this is the default number of IRP's to queue for streaming ISO +// data. +// +#define DEFAULT_ISO_BUFFER_COUNT 2 + +// +// Default number of frames of ISO data transferred by a single ISO +// URB/IRP +// +#define DEFAULT_ISO_FRAMES_PER_BUFFER 10 + +typedef struct _ISO_STREAM_OBJECT ISO_STREAM_OBJECT, *PISO_STREAM_OBJECT; + +typedef struct _ISO_TRANSFER_OBJECT +{ + ULONG Frame; + PISO_STREAM_OBJECT StreamObject; + PURB Urb; + PIRP Irp; + KEVENT Done; +} ISO_TRANSFER_OBJECT, *PISO_TRANSFER_OBJECT; + +typedef struct _ISO_STREAM_OBJECT +{ + PDEVICE_OBJECT DeviceObject; + ULONG PacketSize; + ULONG NumPackets; + PUSBD_PIPE_INFORMATION PipeInfo; + PVOID TransferBuffer; + ULONG TransferBufferLength; + PVOID IsoDescriptorBuffer; + ULONG FramesPerBuffer; + ULONG BufferCount; + ULONG PendingTransfers; + PRING_BUFFER DataRingBuffer; + PRING_BUFFER DescriptorRingBuffer; + PISO_TRANSFER_OBJECT TransferObject; +} ISO_STREAM_OBJECT, *PISO_STREAM_OBJECT; + + +#define Ezusb_NAME_MAX 64 + + + + +// +// This is an unused structure in this driver, but is provided here +// so when you extend the driver to deal with USB pipes, you may wish +// to use this structure as an example or model. +// +typedef struct _EZUSB_PIPE { + ULONG Mode; + ULONG Option; + ULONG Param1; + ULONG Param2; + WCHAR Name[Ezusb_NAME_MAX]; + PUSBD_PIPE_INFORMATION PipeInfo; +} EZUSB_PIPE, *PEZUSB_PIPE; + + +/* +// The interface number on this device that this driver expects to use +// This would be in the bInterfaceNumber field of the Interface Descriptor, hence +// this device driver would need to know this value. +*/ +#define SAMPLE_INTERFACE_NBR 0x00 + + +// +// A structure representing the instance information associated with +// this particular device. +// +typedef struct _DEVICE_EXTENSION +{ + + // physical device object + PDEVICE_OBJECT PhysicalDeviceObject; + + // Device object we call when submitting Urbs/Irps to the USB stack + PDEVICE_OBJECT StackDeviceObject; + + // Indicates that we have recieved a STOP message + BOOLEAN Stopped; + + // Indicates that we are enumerated and configured. Used to hold + // of requests until we are ready for them + BOOLEAN Started; + + // Indicates the device needs to be cleaned up (ie., some configuration + // has occurred and needs to be torn down). + BOOLEAN NeedCleanup; + + // configuration handle for the configuration the + // device is currently in + USBD_CONFIGURATION_HANDLE ConfigurationHandle; + + // ptr to the USB device descriptor + // for this device + PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; + + // we support up to one interface + PUSBD_INTERFACE_INFORMATION Interface; + + // the number of device handles currently open to the device object. + // Gets incremented by Create and decremented by Close + ULONG OpenHandles; + + // Name buffer for our named Functional device object link + WCHAR DeviceLinkNameBuffer[Ezusb_NAME_MAX]; + + // This member is used to store the URB status of the + // most recently failed URB. If a USB transfer fails, a caller + // can use IOCTL_EZUSB_GET_LAST_ERROR to retrieve this value. + // There's only room for one, so you better get it quick (or at + // least before the next URB failure occurs). + USBD_STATUS LastFailedUrbStatus; + + // use counter for the device. Gets incremented when the driver receives + // a request and gets decremented when a request s completed. + LONG usage; + + // this ev gets set when it is ok to remove the device + KEVENT evRemove; + + // TRUE if we're trying to remove this device + BOOLEAN removing; + + BOOLEAN StopIsoStream; + + PRING_BUFFER DataRingBuffer; + PRING_BUFFER DescriptorRingBuffer; + +} DEVICE_EXTENSION, *PDEVICE_EXTENSION; + + +#if DBG + +#define Ezusb_KdPrint(_x_) DbgPrint("Ezusb.SYS: "); \ + DbgPrint _x_ ; +#define TRAP() DbgBreakPoint() +#else +#define Ezusb_KdPrint(_x_) +#define TRAP() +#endif + + +NTSTATUS +Ezusb_Dispatch( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +VOID +Ezusb_Unload( + IN PDRIVER_OBJECT DriverObject + ); + +NTSTATUS +Ezusb_StartDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +Ezusb_StopDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +Ezusb_RemoveDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +Ezusb_CallUSBD( + IN PDEVICE_OBJECT DeviceObject, + IN PURB Urb + ); + +NTSTATUS +Ezusb_PnPAddDevice( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PhysicalDeviceObject + ); + +NTSTATUS +Ezusb_CreateDeviceObject( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT *DeviceObject, + LONG Instance + ); + +NTSTATUS +Ezusb_ConfigureDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +Ezusb_Create( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_Close( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_Read_Write( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_ProcessIOCTL( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_SelectInterfaces( + IN PDEVICE_OBJECT DeviceObject, + IN PUSB_CONFIGURATION_DESCRIPTOR ConfigurationDescriptor, + IN PUSBD_INTERFACE_INFORMATION Interface + ); + +NTSTATUS +Ezusb_ResetPipe( + IN PDEVICE_OBJECT DeviceObject, + IN ULONG PipeNum + ); + +NTSTATUS +Ezusb_AbortPipe( + IN PDEVICE_OBJECT DeviceObject, + IN USBD_PIPE_HANDLE PipeHandle + ); + +ULONG +Ezusb_GetCurrentFrameNumber( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +Ezusb_Read_Write_Direct( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN BOOLEAN Read + ); + +ULONG +Ezusb_DownloadTest( + IN PDEVICE_OBJECT DeviceObject, + IN PVENDOR_REQUEST_IN pVendorRequest + ); + +NTSTATUS +Ezusb_ResetParentPort( + IN IN PDEVICE_OBJECT DeviceObject + ); + +VOID +Ezusb_Cleanup( + PDEVICE_OBJECT DeviceObject + ); + +ULONG +Ezusb_GetDescriptor( + IN PDEVICE_OBJECT fdo, + PVOID DescriptorBuffer, + ULONG BufferLength, + UCHAR DescriptorType + ); + +ULONG +Ezusb_GetDeviceDescriptor( + IN PDEVICE_OBJECT DeviceObject, + PVOID pvOutputBuffer + ); + +ULONG +Ezusb_GetConfigDescriptor( + IN PDEVICE_OBJECT DeviceObject, + PVOID pvOutputBuffer, + ULONG ulngth + ); + +ULONG +Ezusb_VendorRequest( + IN PDEVICE_OBJECT DeviceObject, + PVENDOR_REQUEST_IN pVendorRequest + ); + +ULONG +Ezusb_GetCurrentConfig( + IN PDEVICE_OBJECT DeviceObject, + IN PVENDOR_REQUEST_IN pVendorRequest + ); + +ULONG +Ezusb_GetCurrentInterface( + IN PDEVICE_OBJECT DeviceObject, + IN PVENDOR_REQUEST_IN pVendorRequest + ); + +PUSB_CONFIGURATION_DESCRIPTOR +GetConfigDescriptor( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +ConfigureDevice( + IN PDEVICE_OBJECT DeviceObject + ); + +NTSTATUS +SetInterface( + IN PDEVICE_OBJECT DeviceObject, + IN UCHAR InterfaceNumber, + IN UCHAR AlternateSetting + ); + +ULONG +Ezusb_GetStringDescriptor( + IN PDEVICE_OBJECT DeviceObject, + UCHAR Index, + USHORT LanguageId, + PVOID pvOutputBuffer, + ULONG ulLength + ); + +NTSTATUS +Ezusb_VendorRequest2( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + + +NTSTATUS +ForwardAndWait( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + + +NTSTATUS +Ezusb_DefaultPnpHandler( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ); + + +NTSTATUS +Ezusb_DispatchPnp( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_DispatchPower( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_HandleStartDevice( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp + ); + +NTSTATUS +Ezusb_HandleRemoveDevice( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ); + +NTSTATUS +OnRequestComplete( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + IN PKEVENT pev + ); + +NTSTATUS +CompleteRequest( + IN PIRP Irp, + IN NTSTATUS status, + IN ULONG info + ); + +BOOLEAN LockDevice( + IN PDEVICE_OBJECT fdo + ); + +void UnlockDevice( + PDEVICE_OBJECT fdo + ); + + +NTSTATUS InitTransferObject( + IN OUT PISO_STREAM_OBJECT streamObject, + IN ULONG index + ); + +NTSTATUS Ezusb_StartIsoTransfer( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ); + +NTSTATUS IsoTransferComplete( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp, + IN PVOID Context + ); + + +NTSTATUS Ezusb_AnchorDownload( + PDEVICE_OBJECT fdo, + WORD offset, + PUCHAR downloadBuffer, + ULONG downloadSize + ); + +NTSTATUS Ezusb_DownloadIntelHex( + PDEVICE_OBJECT fdo, + PINTEL_HEX_RECORD hexRecord + ); + +NTSTATUS Ezusb_8051Reset( + PDEVICE_OBJECT fdo, + UCHAR resetBit + ); + +NTSTATUS Ezusb_StartIsoStream( + IN PDEVICE_OBJECT fdo, + IN PIRP Irp + ); + +BOOLEAN IsFx2( + IN PDEVICE_OBJECT fdo + ); + +NTSTATUS Ezusb_SetFeature( + IN PDEVICE_OBJECT fdo, + IN PSET_FEATURE_CONTROL setFeatureControl + ); + +#endif //DRIVER section + + +/////////////////////////////////////////////////////// +// +// IOCTL Definitions +// +// User mode applications wishing to send IOCTLs to a kernel mode driver +// must use this file to set up the correct type of IOCTL code permissions. +// +// Note: this file depends on the file DEVIOCTL.H which contains the macro +// definition for "CTL_CODE" below. Include that file before you include +// this one in your source code. DEVIOCTL.H is a Microsoft header file. +// DEVIOCTL.H is normally obtained by installing the Windows DDK. +// +/////////////////////////////////////////////////////// + +// +// Set the base of the IOCTL control codes. This is somewhat of an +// arbitrary base number, so you can change this if you want unique +// IOCTL codes. You should consult the Windows NT DDK for valid ranges +// of IOCTL index codes before you choose a base index number. +// + +#define Ezusb_IOCTL_INDEX 0x0800 + + +#define IOCTL_Ezusb_GET_PIPE_INFO CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+0,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+1,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+2,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_BULK_OR_INTERRUPT_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+3,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_BULK_OR_INTERRUPT_READ CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+4,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_VENDOR_REQUEST CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+5,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_GET_CURRENT_CONFIG CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+6,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_ANCHOR_DOWNLOAD CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+7,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_RESET CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+12,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_RESETPIPE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+13,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_ABORTPIPE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+15,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_SETINTERFACE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+16,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_Ezusb_GET_STRING_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+17,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + + +// +// Perform an IN transfer over the specified bulk or interrupt pipe. +// +// lpInBuffer: BULK_TRANSFER_CONTROL stucture specifying the pipe number to read from +// nInBufferSize: sizeof(BULK_TRANSFER_CONTROL) +// lpOutBuffer: Buffer to hold data read from the device. +// nOutputBufferSize: size of lpOutBuffer. This parameter determines +// the size of the USB transfer. +// lpBytesReturned: actual number of bytes read +// +#define IOCTL_EZUSB_BULK_READ CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+19,\ + METHOD_OUT_DIRECT, \ + FILE_ANY_ACCESS) + +// +// Perform an OUT transfer over the specified bulk or interrupt pipe. +// +// lpInBuffer: BULK_TRANSFER_CONTROL stucture specifying the pipe number to write to +// nInBufferSize: sizeof(BULK_TRANSFER_CONTROL) +// lpOutBuffer: Buffer of data to write to the device +// nOutputBufferSize: size of lpOutBuffer. This parameter determines +// the size of the USB transfer. +// lpBytesReturned: actual number of bytes written +// +#define IOCTL_EZUSB_BULK_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+20,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +// +// The following IOCTL's are defined as using METHOD_DIRECT_IN buffering. +// This means that the output buffer is directly mapped into system +// space and probed for read access by the driver. This means that it is +// brought into memory if it happens to be paged out to disk. Even though +// the buffer is only probed for read access, it is safe (probably) to +// write to it as well. This read/write capability is used for the loopback +// IOCTL's +// + +// TODO Insert Loopback IOCTL's + +// +// Retrieve the current USB frame number from the Host Controller +// +// lpInBuffer: NULL +// nInBufferSize: 0 +// lpOutBuffer: PULONG to hold current frame number +// nOutputBufferSize: sizeof(PULONG) +// +#define IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+21,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + + +// +// Performs a vendor or class specific control transfer to EP0. The contents of +// the input parameter determine the type of request. See the USB spec +// for more information on class and vendor control transfers. +// +// lpInBuffer: PVENDOR_OR_CLASS_REQUEST_CONTROL +// nInBufferSize: sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL) +// lpOutBuffer: pointer to a buffer if the request involves a data transfer +// nOutputBufferSize: size of the transfer buffer (corresponds to the wLength +// field of the USB setup packet) +// +#define IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+22,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +// +// Retrieves the actual USBD_STATUS code for the most recently failed +// URB. +// +// lpInBuffer: NULL +// nInBufferSize: 0 +// lpOutBuffer: PULONG to hold the URB status +// nOutputBufferSize: sizeof(ULONG) +// + +#define IOCTL_EZUSB_GET_LAST_ERROR CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+23,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +// +// Reads from the specified ISO endpoint. (USB IN Transfer) +// +// lpInBuffer: ISO_TRANSFER_CONTROL +// nInBufferSize: sizeof(ISO_TRANSFER_CONTROL) +// lpOutBuffer: buffer to hold data read from the device +// nOutputBufferSize: size of the read buffer. +// +// +// + +#define IOCTL_EZUSB_ISO_READ CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+25,\ + METHOD_OUT_DIRECT, \ + FILE_ANY_ACCESS) + +// +// Writes to the specified ISO endpoint. (USB OUT Transfer) +// +// lpInBuffer: ISO_TRANSFER_CONTROL +// nInBufferSize: sizeof(ISO_TRANSFER_CONTROL) +// lpOutBuffer: buffer to hold data to write to the device +// nOutputBufferSize: size of the write buffer. +// +// +// + +#define IOCTL_EZUSB_ISO_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+26,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +// +// Performs and Anchor Download. +// +// lpInBuffer: PANCHOR_DOWNLOAD_CONTROL +// nInBufferSize: sizeof(ANCHOR_DOWNLOAD_CONTROL) +// lpOutBuffer: pointer to a buffer of data to download to the device +// nOutputBufferSize: size of the transfer buffer +// +#define IOCTL_EZUSB_ANCHOR_DOWNLOAD CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+27,\ + METHOD_IN_DIRECT, \ + FILE_ANY_ACCESS) + +// +// Returns driver version information +// +// lpInBuffer: NULL +// nInBufferSize: 0 +// lpOutBuffer: PEZUSB_DRIVER_VERSION +// nOutputBufferSize: sizeof(EZUSB_DRIVER_VERSION) +// +#define IOCTL_EZUSB_GET_DRIVER_VERSION CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+29,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_EZUSB_START_ISO_STREAM CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+30,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_EZUSB_STOP_ISO_STREAM CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+31,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) + +#define IOCTL_EZUSB_READ_ISO_BUFFER CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+32,\ + METHOD_OUT_DIRECT, \ + FILE_ANY_ACCESS) + +#define IOCTL_EZUSB_SET_FEATURE CTL_CODE(FILE_DEVICE_UNKNOWN, \ + Ezusb_IOCTL_INDEX+33,\ + METHOD_BUFFERED, \ + FILE_ANY_ACCESS) diff --git a/iidx/ezusb/driver/src/ezusbsys.inf b/iidx/ezusb/driver/src/ezusbsys.inf new file mode 100755 index 0000000..d3f9822 --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.inf @@ -0,0 +1,88 @@ +; +; ezusbsys.inf +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +;ClassGuid={AE18AA60-7F6A-11D4-97DD-00010229B959} +ClassGuid={36fc9e60-c465-11cf-8056-444553540000} +Provider=%ManufacturerName% +CatalogFile=ezusbsys.cat +DriverVer= + +[DestinationDirs] +DefaultDestDir = 12 +ezusbsys_Device_CoInstaller_CopyFiles = 11 + +[SourceDisksNames] +1 = %DiskName%,,,"" + +[SourceDisksFiles] +ezusbsys.sys = 1,, +WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ; make sure the number matches with SourceDisksNames + +;***************************************** +; Install Section +;***************************************** + +[Manufacturer] +%ManufacturerName%=Standard,NT$ARCH$ + +[Standard.NT$ARCH$] +%ezusbsys.DeviceDesc%=ezusbsys_Device, USB\VID_0547&PID_2235 + +[ezusbsys_Device.NT] +CopyFiles=Drivers_Dir + +[Drivers_Dir] +ezusbsys.sys + +[ezusbsys_Device.NT.HW] +AddReg=ezusbsys_AddReg + +[ezusbsys_AddReg] +; By default, USBDevice class uses iProduct descriptor to name the device in +; Device Manager on Windows 8 and higher. +; Uncomment for this device to use %DeviceName% on Windows 8 and higher: +;HKR,,FriendlyName,,%ezusbsys.DeviceDesc% + +;-------------- Service installation +[ezusbsys_Device.NT.Services] +AddService = ezusbsys,%SPSVCINST_ASSOCSERVICE%, ezusbsys_Service_Inst + +; -------------- ezusbsys driver install sections +[ezusbsys_Service_Inst] +DisplayName = %ezusbsys.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\ezusbsys.sys + +; +;--- ezusbsys_Device Coinstaller installation ------ +; + +[ezusbsys_Device.NT.CoInstallers] +AddReg=ezusbsys_Device_CoInstaller_AddReg +CopyFiles=ezusbsys_Device_CoInstaller_CopyFiles + +[ezusbsys_Device_CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller" + +[ezusbsys_Device_CoInstaller_CopyFiles] +WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll + +[ezusbsys_Device.NT.Wdf] +KmdfService = ezusbsys, ezusbsys_wdfsect +[ezusbsys_wdfsect] +KmdfLibraryVersion = $KMDFVERSION$ + +[Strings] +SPSVCINST_ASSOCSERVICE= 0x00000002 +ManufacturerName="Cypress" +ClassName="Universal Serial Bus devices" +DiskName = "ezusbsys Installation Disk" +ezusbsys.DeviceDesc = "Cypress EZ-USB (2235) - EEPROM missing" +ezusbsys.SVCDESC = "ezusbsys Service" +REG_MULTI_SZ = 0x00010000 diff --git a/iidx/ezusb/driver/src/ezusbsys.sln b/iidx/ezusb/driver/src/ezusbsys.sln new file mode 100755 index 0000000..657854f --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.202 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ezusbsys", "ezusbsys.vcxproj", "{75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|ARM.ActiveCfg = Debug|ARM + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|ARM.Build.0 = Debug|ARM + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|ARM.Deploy.0 = Debug|ARM + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|ARM64.Build.0 = Debug|ARM64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|x64.ActiveCfg = Debug|x64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|x64.Build.0 = Debug|x64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|x64.Deploy.0 = Debug|x64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|x86.ActiveCfg = Debug|Win32 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|x86.Build.0 = Debug|Win32 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Debug|x86.Deploy.0 = Debug|Win32 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|ARM.ActiveCfg = Release|ARM + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|ARM.Build.0 = Release|ARM + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|ARM.Deploy.0 = Release|ARM + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|ARM64.ActiveCfg = Release|ARM64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|ARM64.Build.0 = Release|ARM64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|ARM64.Deploy.0 = Release|ARM64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|x64.ActiveCfg = Release|x64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|x64.Build.0 = Release|x64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|x64.Deploy.0 = Release|x64 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|x86.ActiveCfg = Release|Win32 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|x86.Build.0 = Release|Win32 + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4}.Release|x86.Deploy.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BFD27D82-E463-4D02-84EB-255E3240BB26} + EndGlobalSection +EndGlobal diff --git a/iidx/ezusb/driver/src/ezusbsys.vcxproj b/iidx/ezusb/driver/src/ezusbsys.vcxproj new file mode 100755 index 0000000..2affd39 --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.vcxproj @@ -0,0 +1,278 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + Debug + ARM + + + Release + ARM + + + Debug + ARM64 + + + Release + ARM64 + + + + + + + {75EFB134-B7B7-4F40-B169-8BF8A8A5F8B4} + {8c0e3d8b-df43-455b-815a-4a0e72973bc6} + v4.5 + 12.0 + Debug + Win32 + ezusbsys + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Desktop + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Desktop + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Desktop + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Desktop + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Universal + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Universal + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Universal + + + WindowsKernelModeDriver10.0 + Driver + KMDF + Universal + + + + Windows7 + true + + + Windows7 + false + + + Windows7 + true + false + true + <_NT_TARGET_VERSION> + + + + Windows7 + false + false + true + <_NT_TARGET_VERSION> + + + + Windows10 + true + + + Windows10 + false + + + Windows10 + true + + + Windows10 + false + + + + + + + + + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + DbgengKernelDebugger + + + + false + true + trace.h + true + false + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib;usbd.lib + + + + + false + true + trace.h + true + false + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib;usbd.lib + + + + + false + true + trace.h + true + false + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib;usbd.lib + false + + + + + false + true + trace.h + true + false + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib;usbd.lib + false + + + + + true + true + trace.h + true + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib + + + + + true + true + trace.h + true + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib + + + + + true + true + trace.h + true + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib + + + + + true + true + trace.h + true + + + %(AdditionalDependencies);usbdex.lib;ntstrsafe.lib + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/iidx/ezusb/driver/src/ezusbsys.vcxproj.filters b/iidx/ezusb/driver/src/ezusbsys.vcxproj.filters new file mode 100755 index 0000000..5f3d815 --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.vcxproj.filters @@ -0,0 +1,42 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + {8E41214B-6785-4CFE-B992-037D68949A14} + inf;inv;inx;mof;mc; + + + + + Driver Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/iidx/ezusb/driver/src/ezusbsys.vcxproj.user b/iidx/ezusb/driver/src/ezusbsys.vcxproj.user new file mode 100755 index 0000000..60835c7 --- /dev/null +++ b/iidx/ezusb/driver/src/ezusbsys.vcxproj.user @@ -0,0 +1,11 @@ + + + + TestSign + DbgengKernelDebugger + + + TestSign + DbgengKernelDebugger + + \ No newline at end of file diff --git a/iidx/ezusb/driver/src/resource.h b/iidx/ezusb/driver/src/resource.h new file mode 100755 index 0000000..ee9aabe --- /dev/null +++ b/iidx/ezusb/driver/src/resource.h @@ -0,0 +1,15 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Developer Studio generated include file. +// Used by ezusbsys.rc +// + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1000 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/iidx/ezusb/driver/win10/x64/ezusbsys.cat b/iidx/ezusb/driver/win10/x64/ezusbsys.cat new file mode 100755 index 0000000..b952c0c Binary files /dev/null and b/iidx/ezusb/driver/win10/x64/ezusbsys.cat differ diff --git a/iidx/ezusb/driver/win10/x64/ezusbsys.inf b/iidx/ezusb/driver/win10/x64/ezusbsys.inf new file mode 100755 index 0000000..a825a0d --- /dev/null +++ b/iidx/ezusb/driver/win10/x64/ezusbsys.inf @@ -0,0 +1,91 @@ +; +; ezusbsys.inf +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +;ClassGuid={AE18AA60-7F6A-11D4-97DD-00010229B959} +ClassGuid={36fc9e60-c465-11cf-8056-444553540000} +Provider=%ManufacturerName% +CatalogFile=ezusbsys.cat +DriverVer = 04/27/2019,19.58.17.679 + +[DestinationDirs] +DefaultDestDir = 12 +ezusbsys_Device_CoInstaller_CopyFiles = 11 + +[SourceDisksNames] +1 = %DiskName%,,,"" + +[SourceDisksFiles] +ezusbsys.sys = 1,, +; + + +;***************************************** +; Install Section +;***************************************** + +[Manufacturer] +%ManufacturerName%=Standard,NTamd64 + +[Standard.NTamd64] +%ezusbsys.DeviceDesc%=ezusbsys_Device, USB\VID_0547&PID_2235 + +[ezusbsys_Device.NT] +CopyFiles=Drivers_Dir + +[Drivers_Dir] +ezusbsys.sys + +[ezusbsys_Device.NT.HW] +AddReg=ezusbsys_AddReg + +[ezusbsys_AddReg] +; By default, USBDevice class uses iProduct descriptor to name the device in +; Device Manager on Windows 8 and higher. +; Uncomment for this device to use %DeviceName% on Windows 8 and higher: +;HKR,,FriendlyName,,%ezusbsys.DeviceDesc% + +;-------------- Service installation +[ezusbsys_Device.NT.Services] +AddService = ezusbsys,%SPSVCINST_ASSOCSERVICE%, ezusbsys_Service_Inst + +; -------------- ezusbsys driver install sections +[ezusbsys_Service_Inst] +DisplayName = %ezusbsys.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\ezusbsys.sys + +; +;--- ezusbsys_Device Coinstaller installation ------ +; + +[ezusbsys_Device.NT.CoInstallers] +AddReg=ezusbsys_Device_CoInstaller_AddReg +CopyFiles=ezusbsys_Device_CoInstaller_CopyFiles + +[ezusbsys_Device_CoInstaller_AddReg] +; + + +[ezusbsys_Device_CoInstaller_CopyFiles] +; + + +[ezusbsys_Device.NT.Wdf] +KmdfService = ezusbsys, ezusbsys_wdfsect +[ezusbsys_wdfsect] +KmdfLibraryVersion = 1.15 + +[Strings] +SPSVCINST_ASSOCSERVICE= 0x00000002 +ManufacturerName="Cypress" +ClassName="Universal Serial Bus devices" +DiskName = "ezusbsys Installation Disk" +ezusbsys.DeviceDesc = "Cypress EZ-USB (2235) - EEPROM missing" +ezusbsys.SVCDESC = "ezusbsys Service" +REG_MULTI_SZ = 0x00010000 diff --git a/iidx/ezusb/driver/win10/x64/ezusbsys.sys b/iidx/ezusb/driver/win10/x64/ezusbsys.sys new file mode 100755 index 0000000..df3aca9 Binary files /dev/null and b/iidx/ezusb/driver/win10/x64/ezusbsys.sys differ diff --git a/iidx/ezusb/driver/win10/x86/ezusbsys.cat b/iidx/ezusb/driver/win10/x86/ezusbsys.cat new file mode 100755 index 0000000..69262db Binary files /dev/null and b/iidx/ezusb/driver/win10/x86/ezusbsys.cat differ diff --git a/iidx/ezusb/driver/win10/x86/ezusbsys.inf b/iidx/ezusb/driver/win10/x86/ezusbsys.inf new file mode 100755 index 0000000..be4e36c --- /dev/null +++ b/iidx/ezusb/driver/win10/x86/ezusbsys.inf @@ -0,0 +1,91 @@ +; +; ezusbsys.inf +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +;ClassGuid={AE18AA60-7F6A-11D4-97DD-00010229B959} +ClassGuid={36fc9e60-c465-11cf-8056-444553540000} +Provider=%ManufacturerName% +CatalogFile=ezusbsys.cat +DriverVer = 04/27/2019,19.55.31.910 + +[DestinationDirs] +DefaultDestDir = 12 +ezusbsys_Device_CoInstaller_CopyFiles = 11 + +[SourceDisksNames] +1 = %DiskName%,,,"" + +[SourceDisksFiles] +ezusbsys.sys = 1,, +; + + +;***************************************** +; Install Section +;***************************************** + +[Manufacturer] +%ManufacturerName%=Standard,NTx86 + +[Standard.NTx86] +%ezusbsys.DeviceDesc%=ezusbsys_Device, USB\VID_0547&PID_2235 + +[ezusbsys_Device.NT] +CopyFiles=Drivers_Dir + +[Drivers_Dir] +ezusbsys.sys + +[ezusbsys_Device.NT.HW] +AddReg=ezusbsys_AddReg + +[ezusbsys_AddReg] +; By default, USBDevice class uses iProduct descriptor to name the device in +; Device Manager on Windows 8 and higher. +; Uncomment for this device to use %DeviceName% on Windows 8 and higher: +;HKR,,FriendlyName,,%ezusbsys.DeviceDesc% + +;-------------- Service installation +[ezusbsys_Device.NT.Services] +AddService = ezusbsys,%SPSVCINST_ASSOCSERVICE%, ezusbsys_Service_Inst + +; -------------- ezusbsys driver install sections +[ezusbsys_Service_Inst] +DisplayName = %ezusbsys.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\ezusbsys.sys + +; +;--- ezusbsys_Device Coinstaller installation ------ +; + +[ezusbsys_Device.NT.CoInstallers] +AddReg=ezusbsys_Device_CoInstaller_AddReg +CopyFiles=ezusbsys_Device_CoInstaller_CopyFiles + +[ezusbsys_Device_CoInstaller_AddReg] +; + + +[ezusbsys_Device_CoInstaller_CopyFiles] +; + + +[ezusbsys_Device.NT.Wdf] +KmdfService = ezusbsys, ezusbsys_wdfsect +[ezusbsys_wdfsect] +KmdfLibraryVersion = 1.15 + +[Strings] +SPSVCINST_ASSOCSERVICE= 0x00000002 +ManufacturerName="Cypress" +ClassName="Universal Serial Bus devices" +DiskName = "ezusbsys Installation Disk" +ezusbsys.DeviceDesc = "Cypress EZ-USB (2235) - EEPROM missing" +ezusbsys.SVCDESC = "ezusbsys Service" +REG_MULTI_SZ = 0x00010000 diff --git a/iidx/ezusb/driver/win10/x86/ezusbsys.sys b/iidx/ezusb/driver/win10/x86/ezusbsys.sys new file mode 100755 index 0000000..4c23d9c Binary files /dev/null and b/iidx/ezusb/driver/win10/x86/ezusbsys.sys differ diff --git a/iidx/ezusb/driver/win7/x64/WdfCoinstaller01009.dll b/iidx/ezusb/driver/win7/x64/WdfCoinstaller01009.dll new file mode 100755 index 0000000..1731b96 Binary files /dev/null and b/iidx/ezusb/driver/win7/x64/WdfCoinstaller01009.dll differ diff --git a/iidx/ezusb/driver/win7/x64/ezusbsys.cat b/iidx/ezusb/driver/win7/x64/ezusbsys.cat new file mode 100755 index 0000000..5eb63db Binary files /dev/null and b/iidx/ezusb/driver/win7/x64/ezusbsys.cat differ diff --git a/iidx/ezusb/driver/win7/x64/ezusbsys.inf b/iidx/ezusb/driver/win7/x64/ezusbsys.inf new file mode 100755 index 0000000..fdf369d --- /dev/null +++ b/iidx/ezusb/driver/win7/x64/ezusbsys.inf @@ -0,0 +1,88 @@ +; +; ezusbsys.inf +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +;ClassGuid={AE18AA60-7F6A-11D4-97DD-00010229B959} +ClassGuid={36fc9e60-c465-11cf-8056-444553540000} +Provider=%ManufacturerName% +CatalogFile=ezusbsys.cat +DriverVer = 04/27/2019,18.57.32.464 + +[DestinationDirs] +DefaultDestDir = 12 +ezusbsys_Device_CoInstaller_CopyFiles = 11 + +[SourceDisksNames] +1 = %DiskName%,,,"" + +[SourceDisksFiles] +ezusbsys.sys = 1,, +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +;***************************************** +; Install Section +;***************************************** + +[Manufacturer] +%ManufacturerName%=Standard,NTamd64 + +[Standard.NTamd64] +%ezusbsys.DeviceDesc%=ezusbsys_Device, USB\VID_0547&PID_2235 + +[ezusbsys_Device.NT] +CopyFiles=Drivers_Dir + +[Drivers_Dir] +ezusbsys.sys + +[ezusbsys_Device.NT.HW] +AddReg=ezusbsys_AddReg + +[ezusbsys_AddReg] +; By default, USBDevice class uses iProduct descriptor to name the device in +; Device Manager on Windows 8 and higher. +; Uncomment for this device to use %DeviceName% on Windows 8 and higher: +;HKR,,FriendlyName,,%ezusbsys.DeviceDesc% + +;-------------- Service installation +[ezusbsys_Device.NT.Services] +AddService = ezusbsys,%SPSVCINST_ASSOCSERVICE%, ezusbsys_Service_Inst + +; -------------- ezusbsys driver install sections +[ezusbsys_Service_Inst] +DisplayName = %ezusbsys.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\ezusbsys.sys + +; +;--- ezusbsys_Device Coinstaller installation ------ +; + +[ezusbsys_Device.NT.CoInstallers] +AddReg=ezusbsys_Device_CoInstaller_AddReg +CopyFiles=ezusbsys_Device_CoInstaller_CopyFiles + +[ezusbsys_Device_CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + +[ezusbsys_Device_CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[ezusbsys_Device.NT.Wdf] +KmdfService = ezusbsys, ezusbsys_wdfsect +[ezusbsys_wdfsect] +KmdfLibraryVersion = 1.9 + +[Strings] +SPSVCINST_ASSOCSERVICE= 0x00000002 +ManufacturerName="Cypress" +ClassName="Universal Serial Bus devices" +DiskName = "ezusbsys Installation Disk" +ezusbsys.DeviceDesc = "Cypress EZ-USB (2235) - EEPROM missing" +ezusbsys.SVCDESC = "ezusbsys Service" +REG_MULTI_SZ = 0x00010000 diff --git a/iidx/ezusb/driver/win7/x64/ezusbsys.sys b/iidx/ezusb/driver/win7/x64/ezusbsys.sys new file mode 100755 index 0000000..d2fff10 Binary files /dev/null and b/iidx/ezusb/driver/win7/x64/ezusbsys.sys differ diff --git a/iidx/ezusb/driver/win7/x86/WdfCoinstaller01009.dll b/iidx/ezusb/driver/win7/x86/WdfCoinstaller01009.dll new file mode 100755 index 0000000..30e81af Binary files /dev/null and b/iidx/ezusb/driver/win7/x86/WdfCoinstaller01009.dll differ diff --git a/iidx/ezusb/driver/win7/x86/ezusbsys.cat b/iidx/ezusb/driver/win7/x86/ezusbsys.cat new file mode 100755 index 0000000..d7922ac Binary files /dev/null and b/iidx/ezusb/driver/win7/x86/ezusbsys.cat differ diff --git a/iidx/ezusb/driver/win7/x86/ezusbsys.inf b/iidx/ezusb/driver/win7/x86/ezusbsys.inf new file mode 100755 index 0000000..fdc60a0 --- /dev/null +++ b/iidx/ezusb/driver/win7/x86/ezusbsys.inf @@ -0,0 +1,88 @@ +; +; ezusbsys.inf +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +;ClassGuid={AE18AA60-7F6A-11D4-97DD-00010229B959} +ClassGuid={36fc9e60-c465-11cf-8056-444553540000} +Provider=%ManufacturerName% +CatalogFile=ezusbsys.cat +DriverVer = 04/27/2019,19.56.53.281 + +[DestinationDirs] +DefaultDestDir = 12 +ezusbsys_Device_CoInstaller_CopyFiles = 11 + +[SourceDisksNames] +1 = %DiskName%,,,"" + +[SourceDisksFiles] +ezusbsys.sys = 1,, +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +;***************************************** +; Install Section +;***************************************** + +[Manufacturer] +%ManufacturerName%=Standard,NTx86 + +[Standard.NTx86] +%ezusbsys.DeviceDesc%=ezusbsys_Device, USB\VID_0547&PID_2235 + +[ezusbsys_Device.NT] +CopyFiles=Drivers_Dir + +[Drivers_Dir] +ezusbsys.sys + +[ezusbsys_Device.NT.HW] +AddReg=ezusbsys_AddReg + +[ezusbsys_AddReg] +; By default, USBDevice class uses iProduct descriptor to name the device in +; Device Manager on Windows 8 and higher. +; Uncomment for this device to use %DeviceName% on Windows 8 and higher: +;HKR,,FriendlyName,,%ezusbsys.DeviceDesc% + +;-------------- Service installation +[ezusbsys_Device.NT.Services] +AddService = ezusbsys,%SPSVCINST_ASSOCSERVICE%, ezusbsys_Service_Inst + +; -------------- ezusbsys driver install sections +[ezusbsys_Service_Inst] +DisplayName = %ezusbsys.SVCDESC% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %12%\ezusbsys.sys + +; +;--- ezusbsys_Device Coinstaller installation ------ +; + +[ezusbsys_Device.NT.CoInstallers] +AddReg=ezusbsys_Device_CoInstaller_AddReg +CopyFiles=ezusbsys_Device_CoInstaller_CopyFiles + +[ezusbsys_Device_CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + +[ezusbsys_Device_CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[ezusbsys_Device.NT.Wdf] +KmdfService = ezusbsys, ezusbsys_wdfsect +[ezusbsys_wdfsect] +KmdfLibraryVersion = 1.9 + +[Strings] +SPSVCINST_ASSOCSERVICE= 0x00000002 +ManufacturerName="Cypress" +ClassName="Universal Serial Bus devices" +DiskName = "ezusbsys Installation Disk" +ezusbsys.DeviceDesc = "Cypress EZ-USB (2235) - EEPROM missing" +ezusbsys.SVCDESC = "ezusbsys Service" +REG_MULTI_SZ = 0x00010000 diff --git a/iidx/ezusb/driver/win7/x86/ezusbsys.sys b/iidx/ezusb/driver/win7/x86/ezusbsys.sys new file mode 100755 index 0000000..6af658c Binary files /dev/null and b/iidx/ezusb/driver/win7/x86/ezusbsys.sys differ diff --git a/iidx/ezusb/driver/xp/x86/ezusb.sys b/iidx/ezusb/driver/xp/x86/ezusb.sys new file mode 100755 index 0000000..780a182 Binary files /dev/null and b/iidx/ezusb/driver/xp/x86/ezusb.sys differ diff --git a/iidx/ezusb/driver/xp/x86/ezusbw2k.inf b/iidx/ezusb/driver/xp/x86/ezusbw2k.inf new file mode 100755 index 0000000..c321a61 --- /dev/null +++ b/iidx/ezusb/driver/xp/x86/ezusbw2k.inf @@ -0,0 +1,141 @@ +[Version] +Signature="$CHICAGO$" +Class=USB +provider=%Cypress% +LayoutFile=layout.inf + +[Manufacturer] +%Cypress%=Cypress + +[Cypress] +; +; This is the VID/PID for the EZ-USB development board. This device +; is bound to a version of the general purpose driver that will +; automatically download the Keil 8051 monitor to external RAM. +; Do not use this VID/PID for your own device or the monitor will +; wipe out your firmware. +; +%USB\VID_0547&PID_0080.DeviceDesc%=EZUSBDEV.Dev, USB\VID_0547&PID_0080 +%USB\VID_04B4&PID_0081.DeviceDesc%=EZUSBDEV.Dev, USB\VID_04B4&PID_0081 + +; +; This VID/PID is used by several of the EZ-USB development kit +; samples. This device is bound to the general purpose driver. +; +%USB\VID_0547&PID_1002.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_1002 + +; +; The folowing PIDs are for all of the devices in the EZ-USB family. +; These are the hardcoded PIDs that will be reported by an EZ-USB +; device with no external EEPROM. Bound to the general purpose driver. +; +%USB\VID_0547&PID_2131.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2131 +%USB\VID_0547&PID_2126.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2126 +%USB\VID_0547&PID_2125.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2125 +%USB\VID_0547&PID_2136.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2136 +%USB\VID_0547&PID_2122.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2122 + +; EZ-USB FX +%USB\VID_0547&PID_2235.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2235 +%USB\VID_0547&PID_2236.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2236 +%USB\VID_0547&PID_2225.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2225 +%USB\VID_0547&PID_2226.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_2226 +%USB\VID_0547&PID_1005.DeviceDesc%=EZUSB.Dev, USB\VID_0547&PID_1005 + +; EZ-USB FX2 +;%USB\VID_04B4&PID_8613.DeviceDesc%=EZUSB.Dev, USB\VID_04B4&PID_8613 +%USB\VID_04B4&PID_1002.DeviceDesc%=EZUSB.Dev, USB\VID_04B4&PID_1002 + +[PreCopySection] +HKR,,NoSetupUI,,1 + +[DestinationDirs] +EZUSB.Files.Ext = 10,System32\Drivers +EZUSB.Files.Inf = 10,INF +EZUSBDEV.Files.Ext = 10,System32\Drivers +EZUSBDEV.Files.Inf = 10,INF + +[EZUSB.Dev] +CopyFiles=EZUSB.Files.Ext, EZUSB.Files.Inf +AddReg=EZUSB.AddReg + +[EZUSB.Dev.NT] +; copyfiles commented out for Win2K to avoid user intervention during install +; CopyFiles=EZUSB.Files.Ext, EZUSB.Files.Inf +AddReg=EZUSB.AddReg + +[EZUSB.Dev.NT.Services] +Addservice = EZUSB, 0x00000002, EZUSB.AddService + +[EZUSB.AddService] +DisplayName = %EZUSB.SvcDesc% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 2 ; SERVICE_AUTO_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\ezusb.sys +LoadOrderGroup = Base + +[EZUSB.AddReg] +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,ezusb.sys + +[EZUSB.Files.Ext] +ezusb.sys + +[EZUSB.Files.Inf] +ezusbw2k.Inf + +[EZUSBDEV.Dev] +CopyFiles=EZUSBDEV.Files.Ext, EZUSBDEV.Files.Inf +AddReg=EZUSBDEV.AddReg + +[EZUSBDEV.Dev.NT] +; copyfiles commented out for Win2K to avoid user intervention during install +; CopyFiles=EZUSBDEV.Files.Ext, EZUSBDEV.Files.Inf +AddReg=EZUSBDEV.AddReg + +[EZUSBDEV.Dev.NT.Services] +Addservice = EZUSBDEV, 0x00000002, EZUSBDEV.AddService + +[EZUSBDEV.AddService] +DisplayName = %EZUSBDEV.SvcDesc% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 2 ; SERVICE_AUTO_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\ezmon.sys +LoadOrderGroup = Base + +[EZUSBDEV.AddReg] +HKR,,DevLoader,,"*ntkern" +HKR,,NTMPDriver,,ezmon.sys + +[EZUSBDEV.Files.Ext] +ezmon.sys + +[EZUSBDEV.Files.Inf] +ezusbw2k.Inf + +;---------------------------------------------------------------; + +[Strings] +Cypress="Cypress Semiconductor" +USB\VID_0547&PID_0080.DeviceDesc="Cypress EZ-USB Development Board" +USB\VID_04B4&PID_0081.DeviceDesc="Cypress EZ-USB FX2 Development Board" +USB\VID_0547&PID_1002.DeviceDesc="Cypress EZ-USB Sample Device" +USB\VID_04B4&PID_1002.DeviceDesc="Cypress EZ-USB Sample Device" +USB\VID_0547&PID_2131.DeviceDesc="Cypress EZ-USB (2131Q/2131S/2135S) - EEPROM missing" +USB\VID_0547&PID_2126.DeviceDesc="Cypress EZ-USB (2126S) - EEPROM missing" +USB\VID_0547&PID_2125.DeviceDesc="Cypress EZ-USB (2121S/2125S) - EEPROM missing" +USB\VID_0547&PID_2136.DeviceDesc="Cypress EZ-USB (2136S) - EEPROM missing" +USB\VID_0547&PID_2122.DeviceDesc="Cypress EZ-USB (2122S) - EEPROM missing" + +USB\VID_0547&PID_2235.DeviceDesc="Cypress EZ-USB (2235) - EEPROM missing" +USB\VID_0547&PID_2236.DeviceDesc="Cypress EZ-USB (2236) - EEPROM missing" +USB\VID_0547&PID_2225.DeviceDesc="Cypress EZ-USB (2225) - EEPROM missing" +USB\VID_0547&PID_2226.DeviceDesc="Cypress EZ-USB (2226) - EEPROM missing" +USB\VID_0547&PID_1005.DeviceDesc="Cypress EZ-USB (Video)" + +;USB\VID_04B4&PID_8613.DeviceDesc="Cypress EZ-USB FX2 (68613) - EEPROM missing" + +EZUSB.SvcDesc="Cypress General Purpose USB Driver (ezusb.sys)" +EZUSBDEV.SvcDesc="Cypress General Purpose USB Driver w/ Keil Monitor (ezmon.sys)" diff --git a/iidx/ezusb/firmware/README.md b/iidx/ezusb/firmware/README.md new file mode 100644 index 0000000..4395360 --- /dev/null +++ b/iidx/ezusb/firmware/README.md @@ -0,0 +1,9 @@ +# Firmware binaries Ezusb (legacy), aka C02 IO +Firmware binary blobs. Requires appropriate tools from BT5 to load them to the +hardware. There are two revisions of firmware images, **v1** and **v2**. + +v1 was used on IIDX 9 to 13 and v2 on IIDX 14 to 24. It does not matter +which revision of the base firmware and FPGA image (always in combination!) are +used when running the real hardware with BT5. Still, we recommend using the v2 +binaries as they are, from a development standpoint, the latest "update". Do +*NOT* mix v1 and v2 binaries. \ No newline at end of file diff --git a/iidx/ezusb/firmware/v1/ezusb_v1.bin b/iidx/ezusb/firmware/v1/ezusb_v1.bin new file mode 100755 index 0000000..7c46401 Binary files /dev/null and b/iidx/ezusb/firmware/v1/ezusb_v1.bin differ diff --git a/iidx/ezusb/firmware/v1/fpga_v1.bin b/iidx/ezusb/firmware/v1/fpga_v1.bin new file mode 100755 index 0000000..f0b7c79 --- /dev/null +++ b/iidx/ezusb/firmware/v1/fpga_v1.bin @@ -0,0 +1 @@ +ÿèøÚýõ×_ýõwýõ×_ýõ÷?ÿßÿý÷ßÿýßÿý÷ßÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ÷ßÿý÷ßÿýßÿý÷ßÿýÿêýÿý÷ßÿý÷ßÿý÷ßÿý÷ßÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßýÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿ_þÿÿ¿ÿþûï¿ÿîï¿ÿþûï¿ÿþWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿þÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿïÅÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿõÿï¿ÿþûï¿ÿþï¿ÿþûï¿ÿþÿùý÷ßÿý÷ßÿ÷ßÿý÷ßÿ¿|þùçŸþùæ_þùçŸþùçÿïÞÿý÷ßÿý÷ßïý÷ßÿý÷ßÿw§ŸþùçŸþùŸþùçŸþù·“û¿ÿþûï¿ÿþû¿ÿþûï¿ÿþûÿÕÿ÷ßÿý÷ßoÿõßÿý÷ßÿÿèÿÛo¯ýöÛo¿ýÚo¿ýöÛo¿ýÿpþÿÿ÷ÿÿÿÿýÿÿÿÿÿÿÿÿÿÿ»ùÿÿÿûÿßÿÿýÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïþÿÿÿÿÿóÿ?óÿÿÿÿÿÿÿÿÿÿÿÿþûï¿ÿþûëÿþûï¿ÿþûïÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ëûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—ÿßÿý÷ßÿýßÿý÷ßÿýnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿÿŸþùçŸþùŸþùçŸþù»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïõÿ×_ýõ×_ý×_ýõ×_ýÏþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÙÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿêÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿïGÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ùÿý÷ßÿý÷ßÿý÷ßÿý÷ßÿ7öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿½çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿùçŸþùçŸÿùçŸþùçoûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÇþÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþGÿýõ×_ýõ×ýõ×_ýõ×ýâÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸúÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿûÿýÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿ÷ÿþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿ_ÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÁÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿ~ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Áûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷gÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿý÷ßÿýßÿý÷ßÿýbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸþùçŸþùŸþùçŸþù·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}çÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿ~õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýôÿ×_ýõ×_ý×_ýõ×_õ?þÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿ7þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿ…ÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿ÷Éÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßüÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿOZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_øÿý÷ßÿý÷ßÿý÷ßÿý÷ßÿ—öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷þÿùçŸþùçŸÿùçŸþùçïûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßwþÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCÿýõ×_ýõ×ýõ×_ýõ×ÿîþÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸøÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿïžüÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿOþÿÿÿÿÿþÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ßÿíÿ÷ÿÿÿÿÿÿßÿÿ—ÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿßÿÇÿÿÿÿûï¿ÿÿýÿÿÿÿÿÿÿÿýîÿÿÿÿÿýÿÿÿþÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿï÷ïÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿ×þÿÿÿÿÿÿÿýýÿÿÿÿÿÿÿÿÿÿüÿÿŸŸù-÷ÿÿÿÿÿÿÿÿÿÿÿ˜õÿÿ_ë·Õ&úÿÿÿÿÿÿÿÿÿÿ¯×ûÿÿO»ï¾Yþÿÿÿÿÿÿÿÿÿÿ÷oÿÿÿó\{ͬÿÿÿÿÿÿÿÿÿÿÿoñÿÿÿÿ³Ç>ÿÿÿÿÿÿÿÿÿÿÿ¿ÛÿÿÿÿÕW_Ùõÿÿÿÿÿÿÿÿÿÿ›øÿÿÿÿÿãïeþÿÿÿÿÿÿÿÿÿÿ×þÿÿÿÿÕ÷rýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½÷ÜóßÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿüóÎÿÿÿÿÿÿÿÿÿÿÿ‰ÿßÿýô×þýßÿý÷ßÿýoÿÿÿß¿Úi÷ýÿÿÿÿÿÿÿÿÿÿoòÿÿÿ÷ÿ{ïþÿÿÿÿÿÿÿÿÿÿÿ?èÿÿÿ¿ÿ÷ßÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿ7ûý·ßÿÿÿÿÿÿÿÿÿÿß+þÿÿÿïî»OÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸüùçŸ{þùŸþùçŸþñ¾ÿÿÿÿÿûï¿ÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}íÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿþ÷þÿÿÿûï¿ßþÿÿÿÿÿÿÿÿÿÿ¯ûÿÿÿ/¿óòÓÿïÿÿÿÿÿÿÿÿÿ•ÿ×_oýôÖ[}ý×_ýõ×_ýŸþÿÿÿïŸÞþ÷ÿßÿÿÿÿÿÿÿÿÿgþÿÿÿþÿÿ~ÿïÿïÿÿÿÿ¿ÿþÿ¥ÿÿÿÿûï¿ï¯ÿûÿÿÿÿÿÿÿÿÿÇÿÿÿŸ÷çßÿÿýÿÿÿÿÿÿÿÿÿàÿÿÿÿýÿÿ¿ïÿþÿÿÿÿÿÿÿÿõÿÿÿÿoÿóÍöÿÿÿÿÿÿÿýÿ?úÿÿÿÿÿöûÿÿÿÿÿÿÿÿÿÿÿßüÿÿÿÿÿÿ}÷ÿßÿÿÿÿÿÿÿÿÿ»þÿÿÿ¿ÿÿÿÿÿïÿÿÿÿÿÿÿÿïÿÿÿßûýÿÿÿ÷ÿÿÿÿÿÿÿÿÿ·ÿÿÿÿÿÿÿßþúÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¿¿~ýÿÿÿÿÿÿÿÿÿâÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿ÷ÿÿ}ÀÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÏXÿÿÿÿÿûûÿÿÿÿÿÿÿÿÿÿÿÿ:½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿ÷ßÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿÿÿÿÿ÷޹þÿÿÿÿÿÿÿÿÿÿ§ýÿÿÿÿÿÿÛoÿÿÿÿÿÿÿÿÿÿ¿›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿ?ùÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿ¿øÿý÷߯ýwÛÿý÷ßÿý÷ßÿ'öÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›þÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿÿÿÿoÿûÿÿÿÿÿÿÿÿÿ½áÿÿÿÿÿÿý÷ÿÿÿÿÿÿÿÿÿÿòÿÿùçŸþùçŸÿùçŸþùç¯ûÿÿÿÿÿÿþïÿÿÿÿÿÿÿÿÿÿÿ?ýÿÿÿÿÿÿý÷ßÿÿÿÿÿÿÿÿÿßþÿÿÿÿÿ¿ÿÿÿßÿÿÿÿÿÿÿÿï'ÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿ‚ÿÿÿÿÿÿo¿üÿÿÿÿïÿÿÿÿÿÿUÿýõ×_oýõ×õõ×_ýõ×ÿåÿÿÿÿÿóû×÷ÿýÿÿÿÿÿÿÿÿÿåÿÿÿÿ_ýÿû÷ïÿÿÿÿÿÿÿÿ¿ßûÿÿÿÿÿÿÿý÷¿ÿÿÿÿ¿ÿÿÿÿüÿÿÿÿú~üÿ×Ïÿÿÿÿÿÿÿÿ?þÿÿÿÿÿÿ×ïÿÿÿÿÿÿÿÿÿwÿÿÿÿïßÿîü÷÷ÿÿÿÿÿÿÜÿ‹ÿÿÿÿÿ»ýïßüÿÿÿÿÿÿýÿ÷ÿÓÿÿÿÿÿíÿÿÿýýÿÿÿÿÿÿÿÿýíÿÿÿÿÿøÿÿ?þþÿÿÿÿÿÿÿÿóÿÿÿÿÿûÿÿ¿ÿÿÿÿÿÿÿÿÿúÿÿÿÿŸþúë¯ÿÿÿÿÿÿÿëÿÿÿùÿÿÿÿÿÿÿ×ßÿÿÿÿÿÿÿ÷ÿÿçþÿÿÿÿÿÿÿýïÿÿÿÿÿÿÿýÿÿüÿÿŸ½ÿ¯ÿýÿÿÿÏÿÿÿÿÿÿ Õÿÿ_ú_ÿóÿúÿÿÿïÿÿ¿ÿÿ¯×ëÿÿO9§ÿÓïÿÿÿÿÿÿÿûÿ÷kÿÿÿ§úÿù÷þÿÿÿÿÿÿïÿÿoôÿÿÿß3±þ×ÃþÿÿÿÿÿÿÿïÿÿÛþÿÿ¯•~ÿ«6Öÿÿÿÿÿÿ¿ûÿÛyþÿÿ×ZÇÿÿ·ÿÿÿÿÿÿÿÿÿÿ7~ÿÿÿ{(×ÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿûoÿÿÿÿÿÿÿÿÿÿ·ÿÿÿÿß¿ù÷ßüÿÿÿÿÿÿÿÿÿŸÿßÿý¶ßmŸíßÿý÷ßÿýaÿÿÿÿ3ÏÿöÛÿÿÿÿÿÿÿÿÿÿoðÿÿÿÿßÿÿûÿÿÿÿÿÿÿÿÿÿ¿ëÿÿÿ¯ý÷ÿŸ/þÿÿÿÿÿÿïÿÿßüÿÿÿVûõûÿ×ÿÿÿÿÿÿÿïÿßËþÿÿÿëþÿÿþÏÿÿÿÿÿÿÿûÿÿwÿÿŸôùçŸ{ôùŸþùçŸþñ¢ÿÿÿÿþÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÕÿÿÿÿýÿÿÿýÿÿÿÿÿÿÿÿÿ}êÿÿÿ¿ÿþûÿ¿þýÿÿÿÿÿÿÿÿþóÿÿÿûïýÿ_ÿÿÿÿÿÿÿÿÿÿïûÿÿÿïÿýßûïÿÿÿÿÿÿÿËÿÿŸõÿ×_ýÕ×_~ô×_ùÕ×[íŸþÿÿÿõ/úßÝ÷ßÿÿÏÿÿÿ¿ÿÿOþÿÿÿÿ÷ïŸÿÿÿ¿¿õÿÿ¿¿þÿ…ÿÿÿÿÿU÷ÿÿÿûÿÿÿÿÿÿÿÿÿß÷ÿÿ½ÿ_üýÿÿÿÿÿÿÿÿáûÿÿÿ]ÿ_ÿÿþÿÿÿÿÿëÿÿõÿÿÿ×ÿÝÿÞ^wÿÿÿÿÿóÏ=ûøþÿÿÿýÿÿÃÿ¿ÿÿÿýþÿÿÿÿýÿÿÿÿûöÿÿþßÿÿÿÿÿÿÿþÿÿÿÿÿÕÿÿ?ïÿÿûßÿÿøÿïÿÿÿÿ¿ýÿ½×ÿçÿÿýïÿÿ³ÿ÷—ÿÿÿÿÿï¿ÿöº¿ÿÿÿß¿ÿÿ[÷‡ÿÿÿÿ¿õÿýÏÿÿÿÿïÿýuêÿÿÿÿÿþûÿÿïÿÿÿÿÿ¿¿þýñÿÿÿÿÿÿÿOÿÿÿÿÿýÿÿýøÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ðÿÿÿÿÓ}ÿÿ÷ÿÿßzóýŸÏÿÿSÖÿÿÿÿÉÿÿßãÿ_Þÿ_÷ï¿ïÿÿÿÿ7_Oÿ÷ÿÿóï¼þ㻾߳ýÿÿÿª¯·žûÿÿûoÿÿ÷Ýÿ¿Ýÿÿÿÿÿ·ò׿ýÿÿÿoŸßÃŽÿÿaÿÿÿÿÿÞ½¯®kÿÿÿÿn½öÛ[oåÿÿÿÿoõ÷ÿÿÿÿý•÷ÿþžøÿÿÿÿÿöúëÿÿÿÿÿ½Wÿßõ¿_ýÿÿÿÿÿãßþùŸÿÿþ²ÿÿÿí¿þÿÿÿÿÿý_þÿŸÿÿößoÿýGþÿý÷ß§½¶{¿ý÷}Ÿ=vÿ¹ýÿÿÿÿ?÷ÿ¿ýû÷ÿ}ÿÛwÿ¿Ýÿÿÿÿÿÿÿï¿ÿÿÿÿÿûßÿÿ¢ÿÿÿÿÿÚﯿþïçýÿÓÿÿÞÿÿòÿÿÿÿõí—_þïÿýñïýnïúÿÿÿÿ÷þûë¿ßÿùÿ÷ÿÿ¿ÿßüÿþùG}ôñçöùçŸþùÇ þÿÿÿÿ¿¿þûûÿÿÿÿ¿ÿÿþÿÿOÿÿÿÿÿß_ÿÿýÿÿÿÿÿÿÿÿÿ÷•ÿÿÿÿÿë¯ÿÿÿ÷ÿÿÿÿ¿ÿÿþûÑÿÿÿÿÿ·×ÿÿÿÿûï¿ßÿûÿ¿àÿÿÿÿÿòû??ýÿÿþÿþÊo¿ÿÔÿ_ýõÖ[}µÕýõ‡_?´µÿøÿÿÿÿßøßÿÿÿÏ?]ü½óýû¿øÿÿÿÿÿßóûõÿÿÿßïÿ¿ÿÿþÿÿÿÿ¯ÿÿÿÿï÷ú«³ÿÿïþÿGÿÿÿÿÿßÞïù×WÿÿW_|ý}ý»ÿÿýÿÿ¿¿»ÿýkÿþÿß[{ý»Ñÿÿÿÿÿýÿûÿýÿÿýõûw÷ìÿéÿÿÿÿÿßkÏÿÿûÿ?üôëGÿÿÿöÿÿÿÿÿÿÿ÷ÿ÷ÿûßýÿÞÿÿ~ùÿÿÿÿ?ÿ¿Óõžüóÿÿûí¿ÿ??ýÿÿÿÿÿþÏÿûoÿÿÿûÿÿ¿þÿÿÿÿßÿÿøÿìýk®ûêëëû?þÿÿÿÿÿÿÿÿ·?ÿû÷ßÿÿû÷ÿ¹ÿÿÿÿÿ¿ÿÿÿýßÿÿûïï·ÿûÿ ÿÿÿÿÿÿÿóã?ÿÿÿÿý?þÿÿ?jýÿÿÿÿÿÿÿóÿÿÿÿÿûßÿÿÿkðþÿÿÿÿÿ?Þóç÷ÿÿ;ÿüÿÿ=Ùÿÿÿÿÿß?ÿïóûÿÿÿž~ÿÿÿÛýÿÿÿÿÿßÿ¿úk¯þßï­nûïöÿÿÿÿÿÿkŸ½özÿ»óÚ+{ùñþÿÿÿÿÿûÿ¿þ_ÙŸ÷üyÿÿÿÿ­ÿÿÿÿÿÿ¸ÿ_þ¿ÿÿ>þåÿÿÿËÿÿÿÿÿÿÿíóÿÿü³ßûÿ·_ÿãÿÿÿÿÿïÿÿÖÿÿñþÿÿ÷_ÿâÿ÷ßÿýößgÿ·Û¿Ý÷ßwÛ_Ûÿÿÿÿÿcÿóÿÿ|ÿû÷ÿÿ÷ÿ»üÿÿÿÿÿíÿ_ÿÿßÿÿÿÿÿýÿ¿úÿÿÿÿÿý~ßýÿþßïïÿÿóŸ÷Wÿÿÿÿÿßþóæü÷çÿþýî÷žÿÿÿÿÿÿÿ¿ÿÿ¯÷ÞÿûÿÿÿoýËÿÿçŸþùÇŸ}ÖÇŸöù矼èÿÿÿÿÿ÷ïÿÿÿï?ÿøÿûÿÿÿÿöÿÿÿÿÿÿýÿÿÿ÷÷ÿýõÿÿŸúÿÿÿÿÿýÿûÿÿÏÿ¿ÿÿÿï¿ßüÿÿÿÿÿûÿ½¿ÿソûÿÿÿÿËþïÿÿÿÿ¿üöË»üÿþÿ¿üôÿÿGýÿõ×_¹Õ—_Ûõ×_{½ñ×_ë«ÿÿÿÿÿï÷?ûý÷ÿü¿þÿÿÿÿ“ÿÿþÿ÷ÿÿÿÿWÿWýóÿßoëÿÿÿÿÿÿÿÿÿÿþûß÷ÿÿÿÿñÿÿÿÿÿÿÿÿ_÷×ÿ_üuÇÿÿøÿÿÿÿÿÿÿ_¿þ×ÿ¯w»ïÿüÿÿÿÿÿÿÿÿßßïÿÿÿ~ý7ÿõþÿ÷ÿßÿÿÓÿsßÿÿï?çüßûÿÿÿÿÿÿÿÿ×÷ÿÿ¿÷ÿýÿw“ÿÿÿÿÿ÷ßþÿ½ûÿÿü+ÏúÿßþÓÿÿÿÿÿ÷ßÿÿýýÿþÿçÿïßÿåÿÿÿÿÿïÿŸþÿÿÿÿûÞ¯ÿÿâÿÿÿÿÿï¿ÿ~ÿÿÿÿoý¿ß~ÿßøÿÿÿÿÿûþÿ¿þÿÿÿ¿ÿÿ÷¿ÿßðÿÿÿÿß}÷ÿÿÿÿÿχ}þÿƒÖÿÿÿÿoýýÓÿÿÿßÿçÍÿÿ¿ïÿÿÿÿ·_þùgÞþÿï÷ëú/çߣýÿÿÿÿ»ÿþû.¿þÿïûÿæÿì¿Åÿÿÿÿÿ·×L7Íþïÿïoóî¿»þkÿÿÿÿÿÛå×Wÿóÿÿö­ñËkÏãÿÿÿÿÿýõ×_ÿýýÿmßþÿ÷øÿÿÿÿÿöß{üýûÿÿ¥ÿÛþoÿüÿÿÿÿÿûï?ÿþßÿÿöþËo¿ùÏþÿÿÿÿÿÿÿOýÿÿÿÿÿYÿýÿWþÿý÷߯Ý÷{ÿý÷Ÿ¤¹æû¡ýÿÿÿÿÿÝs¿ýýÿÿÿ÷Ý¿½Åÿÿÿÿÿÿÿýßÿÿÿÿÿûßßÿ®ÿÿÿÿÿß¿ýþëÿÿÿâwþøÿ÷ÿÿÿÿÿ·ÕwÝüEÿÿ}ýÏ¿_/úÿÿÿÿÿÿ?ï¾ûþÿÿûýÿû·ßŸüÿþùç}üñç}þùç—yî™Ãkþÿÿÿÿ¯ÿþúïÿÿÿŸ¿ûùÿÿõoÿÿÿÿÿ×ßý÷ÿÿÿÿß÷ÿÿÿ÷­ÿÿÿÿÿë¿ÿÿûçÿÿÿÿ¿ÿÿÿûÉÿÿÿÿÿµ÷þûíßþÿïßþÿÿ¿âÿÿÿÿÿöK¿üÿÿÿÿþÛ/ÿÿ÷Òÿ_ýõ×[µõ_ýõ×-õµ¿øÿÿÿÿ=øóË=óÿ?wòÿ;ÿøÿÿÿÿÿ÷ÿþÿÿÿÿÿïÿÿïïÿ7þÿÿÿÿ¯¿þúë¯þÿk¿úÿ÷ÿOÿÿÿÿÿßíýõWÿÿÿ×ýÿ÷ÿÿÿÿÿÿÿû¿ÿ÷[ÿÿßçÿþýýÿÍÿÿÿÿÿq‡?g½ýÿ¿÷ýÿÿÿêÿÿÿÿ÷ÿËÿÿýÿïÿÿØéïÿûÿ÷ÿÿÿÿÿÿÿÿ~ß·ÿûŸÿß÷ÿ>ùÿÿÿÿ?ÿÿóÿ¾ìóÏÿÿèÿÏÿüÿÿÿÿÿþÿïÿûï¿ÿÿ}ß¿½/þÿÿÿÿÿþø½ú}çÿýþòçß'þÿÿÿÿß?ÿýÿïÿÿßÿvýñ÷—ÿÿÿÿÿ÷ßÿÿïþÿþÿ¯ÿÿÿó ÿÿÿÿÿýÿÿÿ¿þÿÿÿ?ùüÿ¿oýÿÿÿÿþÿÿž÷ï¿ÿßßõþÿëñþÿÿÿ?ÿÒYû·×_/¿þ¿xÿ¥Ûÿÿÿÿ¿Ÿë¯ÿÿ묧ßÿßéçýÿÿÿÿÿû¼ßÿíü×ÿ—»ôÿËwöÿÿÿÿÿýÞ¿¶+®©ÿþkêÿöþÿÿÿÿ×~ÿõýõ×ßý·£ÿÿÿÿÿkå¿Wúï¾Îúû?³þþÿÕÿÿÿÿÿ¿ÿùûß¿ü÷ÿÿíçÿyîÿÿÿÿÿßÿùý_ŸõןýÿçÛ}àÿ÷ßÿýöÛßçÝ|¿=öÛoߟÚÿÿÿÿß3ÿ>ÿÿß?÷í¿}öÝüÿÿÿÿý÷ÿÿÿÿ÷ÿýÿï¿ÿûŸúÿÿÿÿ¿½þÚë¿ùÚé¿ÿûÿÿÿÿÿÿÿÿW~÷åß|õijÿïóW÷Šÿÿÿÿÿï¿·þÿóÿúÿÿúßûýÑÿÿçŸôùÇŸ¾ç}þÙçŸ}¼æÿÿÿÿÿûë¿ÿþßÿ¿þûÿïÿÿóÿÿÿÿý÷ÿßÿÿÿ_ÿÿÿßùÿÿÿÿÿþûï¿÷ÿ¿ÿÿÿÿ¿¿_ýÿÿÿÿ_ûÿ¿÷ÿï¿×þÿÿ¿ßþ[þÿÿÿÿoÿûö»ÿýöË?ÿÿÿÿÿ7ÿÿõ×_{ýõV_ùÓ]}ýÕ×_ûƒÿÿÿÿÿ³ÿ¿ÿ½g¿ÿÿ÷ýøÿÿ‹ÿÿÿÿÿïÿÿþÿwÿÿÿþ>O½ûâÿÿÿÿÿÿÿ÷ÿþ÷þÿïÿûÿÿóÿÿÿÿÿÿïÞSn÷ç_ïïÔÇýÿßóÿ¿ÿÿÿÿÿ÷w¿þÿŸÿûú÷þÿ?¸ÿÿÿÿÿßÿÿÖßÜÿÿÿ]ÿÿÿìÿÿÿÿÿÿÿZÓÿýòߎ¿ýßßÿÿÿÿÿÿÿÿÿ÷÷ïÿþÿ{þÿÿóÿÿÿÿøÿþÿïûÿÿÿÿüÞ9¿ÿÉÿÿÿÿýÿßÿÿ¿ùýÿïÿÿÿÿÿÿäÿÿÿÿÿÿ¯¿ž~ëÿÿÚëÿÿÿÿóÿÿÿÿÿÿõWzÿ×ûûýýöÿÿÿ¿øÿÿÿÿÿÿþû¿ÿýÿÿúþýÿþþ?ðÿÿ~ÿå÷ÿÿÿýÿÿgÿÿÿÿ;ÖÿÿÝÿÖûÿÿÿÿùÿÿ×þÿÿ¿Fïÿÿÿï—ÿ~?åß~»äšßþÿÿ\ºýÿÿÿwëçžnîòÚî»?ÿÿ?¿ÍÿÿÿÿÕÿ~¿ÿ÷ÿŸÿîºÿÿÿ`ÿÿÿÿÿúÿïÆÿ»ÿÆ¿½÷ÿÿOæÿÿÿÿßÒÿ½ÿ_ÿýÿÿ7ùÿÿÿÿ¿V_ëïÿ~ýï¿þwýÿÿý÷ÿÿÿÿûkÿÿìÏ¿ÿýþßþÿÿgþÇÿÿÿÿüùÿ¿ýsÿÿuÿ›ÿÿÿOþÿý÷Ûo¼ý÷y¯½v›oýý÷û‰ýÿÿÿŸ=óíÿßþÝ}óýÿÿüÛÿÿÿÿ¿ÿýÿÿÿ÷÷¿ÿýÿÿÿ­ÿÿÿÿ×Ú¿÷ÿÿ¯¿~ç¿ÿÿÿÿðÿÿÿÿ|ÕÅ“ÿµÇW_ýñßÿÿ¯ûÿÿÿ÷¿Þ³ï¿ûßë¬ÿ{ïÿÿßßýÿþùG}ôÙç}ôÑf_þùÇûþÿÿÿë¿ÿùÿÿÿùûûÿÿïÿÿÿoÿÿÿÿõ÷ßÿÿÿ÷ßÿßÿÿ÷•ÿÿÿÿúïÿÿÿú§ÿþúÿÿÿÿÿûÏÿÿÿí½÷Þí×Þ{í·ÿþÿÿ¿êÿÿÿÿÿÿ¿ÿ¿ÿÛO?½ÿÿÿÿwôÿ_ýõ×_{ÕÕOuµ•W_}õµ?ûÿÿÿÿþþóÿ?ðÏ?ÿøïÿÿÿÿøÿÿÿÿÿÿ|ÿûÿûÿÿýýÿÿÿÿ‡þÿÿÿÿßÿÿÿ˯þúë¯ÿùÿÿÿ?þÿÿÿ÷×_½õ‡ø÷ÿ¿ÿÿÿµÿÿÿÿÿï^þûûÿ¿ÿÚûÿïÿ‰ÿÿÿÛqÿÿÿ¹ÿÿÿÏ?ûßîÿýÿýÿÿëÿÿÿÿÿÿßë¯ÿûò¿ÿÿÿÿ¿ÿ~û_ÿûÿÿÿÿÿÿ¿~ùÿÿÿÿ?ÿìñÿŸÿÿÿÿÿÿÿ÷o_ýÿÿÿÿÿ~ûïûŸÿÿÿÿÿÿÿÿ¿/þÿÿÿÿýùýÿÿÿÿ÷ß¾{ÿÿoÿÿÿÿÿßÿïýÿÿöÿÿÿ¿õÿÿ«ÿÿÿÿÿ÷ÿ¿þÿÿÿÿÿÿÏ>ÿÿÿWÿÿÿÿÿý|óÿÿÿÿÿÿÿÿßÿÿ¿lýÿÿÿÿ~Ýåýÿÿÿÿÿÿï¿ÿÿoòþÿÿÿ?­ÿÿÿÿÿÿÿ¿ü÷ÿÿáÙÿÿÿÿ¿ÿþûÿÿÿÿÿÿŸûÿÿÿ«øÿÿÿÿß{å·úÿÿÿÿÿÿÿüúÿ×öÛÿÿÿ¿™úªýÿÿÿÿÿÿ+¯ýÿ@þÿÿÿÿ÷߯½ÿÿÿÿÿÿßÿÿo¯ÿÿÿÿÿo唲ÿÿÿÿÿÿ¿ÿÿÿÿ÷ÿÿÿÿ?»üòÿÿÿÿÿÿÿýÿÿÿëÿÿÿÿÿ_žqÖÿÿÿÿÿÿÿõ÷ÿÿåÿ÷ßÿýçŸ}ÿ÷ßÿýöÝ}ÿÚÿÿÿÿÿóßÿÿÿÿÿÿ?ÿýÿÿßýÿÿÿÿÿÿ÷ßÿÿÿÿÿÿßßÿÿÿŸþÿÿÿÿï½ðÃÿÿÿÿÿÿ¿ÿÿÿÿ/ÿÿÿÿÿw[ìñÿÿÿÿÿÿo¾ûÿ÷†ÿÿÿÿÿë¿ÿîÿÿÿÿÿÿïÿÿÿÿÓÿÿçŸô±ÇžþçŸþÙ矼éÿÿÿÿÿÿß?ÿÿÿÿÿÿÿÿ¿ÿÿÿðÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿ÷ÿ_ùÿÿÿÿÿþóÏÿÿÿÿÿÿþëÿ¿ýÿÿÿÿ{ï½ÿÿÿÿÿÿÿÿýÿÿëüÿÿÿÿo¿øþÿÿÿÿÿÿ¿ýôÿÿwÿÿô×^~ÝõW_ÿÕ×_}½UW_ûŸÿ÷ÿÿÿ³?sÞÿ÷ÿÿÿÿïÿÿÿþ“ÿÿÿÿÿÿsÿÿÿÿÿÿÿÿÿ¿ûíÿÿÿÿÿÿïÿÿÿþÿÿÿÿÿ÷ÿÿÿóÿÿÿÿÍõÿÿþÿÿÿ¿Ñ×ÿÿxúÿÿÿÿÿþõÿÿ¿ÿÿÿÿ¿ýëÿÿ/ýÿÿÿÿßÿÿÿÿŸÿÿÿÿÿüóÿÿ·þÿÿß¿|÷ßÿý÷ß¿¿þÿÿÿûû÷ßÿÿ¿¿þ÷ÿÿÿÿßÿÿÿ«ÿÿÿÿÿÿÍÿûÿûÿÿÿÿý÷ÿÿÿÒÿÿÿÿßÿ×ÿÿÿýÿïÿÿÿûÿÿÿìÿÿÿÿÿ³üÿÿÿÿÿÿï½ÿÿàÿÿÿÿÿÿöûýÿÿÿÿÿÿûïÿÿ?úÿÿÿÿ¿ÿûÿÿÿÿÿÿ÷ÿÿÿýÿñÿŸ}~ÙÏÿÿÿÿÿÿÿÿÿÿÿÿëÖÿ_~µå×ÿÿÿÿÿÿÿÿÿþÛÿ¿~ïÿ¯;å·sÿÿÿÿÿÿÿôÞçý^ªýÿÿsÏïÿÿÿÿÿÿÿûýóþ?¿Ýÿÿ_ÿ-¼Óþÿÿÿÿÿÿÿõï¯ÿ{nÿÿ¯ÿgž¨öÿÿÿÿÿÿï¿òÚÿïåÿÿß_ÿ÷þÿÿÿÿÿÿýßÿÿŸøÿÿo¼ýÆÎþÿÿÿÿÿ¿ÿÿïÿÿ¿üÿÿ¿ÿþûËÿÿÿÿÿÿÿ÷ßÿÿÿþÿÿÏýýÿÿÿÿÿÿÿÇÿÿ_þÿý÷Ùúý÷ÿý÷Ûo¿}÷ÿýÿßs=ÿýÿÿÿÿÿÿüöÏÿÿÿÏÿÿ÷ß¿ÿÿÿÿÿÿÿßÿþ÷ÿÿÿ®ÿÿï½÷ß ÿÿÿÿÿÿÿûëïÿÿÿôÿÿ_yýµÇÿÿÿÿÿÿûåŸÿoúÿÿû¯ÿÿûÿÿÿÿÿÿÿÿúûÿÿßýÿöÑg{þùçþùç}öùÇûþÿÿúû¿ÿüÿÿÿÿÿÿ¿¿þÿÿÿ7ÿÿý÷×ÿÿÿÿÿÿÿ÷_ÿÿÿÿ«ÿÿ¿þÿï?ÿÿÿ÷ÿÿÿÿï¿ÿÿÿÔÿÿ_ûïµ÷þÿÿÿÿÿÿÿÿÿÿÿÿäÿÿ¿ÿöÿÿÿÿÿÿÿÿõÏÿÿÿÿÒÿ_ÝÅW}õÕ_}õÕ_zùõÿûÿÿ»?Û÷ÿÿoÿÿÿÿÿÿÿÿÿßùÿÿ~óÿ;ÿÿûÿÿÿÿÿÿÿÿÿÿçþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿßÿÿÿõ×ÿÿ÷ÿï÷¿ÿÿÿÛýÿÿŸÿÿ¾ÿ¿ýþûïÿóÿÿÿÿ~¿ÿÁÿßÿ÷ÿÿÿýÍÿÿò}ÿÿýÿäÿûÿïìÿÿ?ÿùOÿÿúßÿ¯ÿòÿçÿÿÿÿÿ×ýß÷¿ÿÿÿ}þÿúßÿÿÿÿ¯ÿýÿ¿ÿÿ÷ÿÿÿ¿ÿÿŸüÿïÿÿÿßÿÿÿßÿÿÿÿý÷ÿÿÿÿþÿÿÿï¯ÿþÿÿßÿÿÿÿýÿû®ÿ/þýr_ÿÿõ_ÿÿÿÿûÿîÿ¹ÿßÿÿû÷Ïÿÿßÿýÿÿÿÿÿßþÿ×ýŸ}ÖÛG§þù›þùgŸ~øîÿÿ~ûï·×_ÿýß_ÿý—ßýõÿ÷ž}÷¹÷ßÿößÿý÷Ýÿÿùÿÿý÷ßÿÿÿÿÿÿÿÿßÿþÿÿ_üÿõÿßûÿý÷ßÿý÷ßóÝ÷ßÿÿþ?ß|óÏ6ÿüó?ÿüóÏ?¿üóÿ'÷ß~ÿí÷ßÿýßÿý÷Ûoÿýï—ÿŸÿý÷ß~úéŸ~úé§Ÿ~úéÿÙÿï¿ÿþûï¿ÿþï¿ÿþûï¿ÿþÿàÿÿ~ûí·ßþûïÿþûÿ¿ÿÿûïòÿûï¿ßÞÛï¿}ûo¿ÿ¾ûî¿ÿ¿ûÿûÏ·ÿøûï¿¿ûï¿ÿþÿï¿ïÿüÿûï¿ÿþûï¿ÿ»ï¿ÿúûï¿ÿ/Þÿßÿý÷ÿÿÿßÿÿÿÿÿÿÿÿûÿÿÿûï¿÷þÿþ÷ÿÿÿÿÿÿÿÿ¿—ÿÿûï¿ÿþûï¿óûïÿÿþÿï¿ßÇÿÿÿÿÿÿÿ÷ßÿÿÿÿþûÿÿßÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿþÿôÿ÷Î;ï<óß÷ßýÿßùÿÿÿÿÿÿÿý÷¿ÿÿïÿÿÿÿûÿýÿÿÿÿÿÿÿÿÿÿÿÿ÷ßÿÿÿÿÿoþ??üðÃ?üð3?üðÍÏßüðóÿ¿ÿþûï¿ÿþû·ÿþûïÿþûÿ³ÿÿýóÏ?ÿþÿÿÿÿÿÿÿÿÿÿÿÿËÿÿöÛoŸý÷ßÿ÷ßÿÿõÿß~îÿî<òÈ3¿ÿÞï½÷÷·ÿÞþõÿÿ \ No newline at end of file diff --git a/iidx/ezusb/firmware/v2/ezusb_v2.bin b/iidx/ezusb/firmware/v2/ezusb_v2.bin new file mode 100755 index 0000000..9d805da Binary files /dev/null and b/iidx/ezusb/firmware/v2/ezusb_v2.bin differ diff --git a/iidx/ezusb/firmware/v2/fpga_v2.bin b/iidx/ezusb/firmware/v2/fpga_v2.bin new file mode 100755 index 0000000..f0b7c79 --- /dev/null +++ b/iidx/ezusb/firmware/v2/fpga_v2.bin @@ -0,0 +1 @@ +ÿèøÚýõ×_ýõwýõ×_ýõ÷?ÿßÿý÷ßÿýßÿý÷ßÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ÷ßÿý÷ßÿýßÿý÷ßÿýÿêýÿý÷ßÿý÷ßÿý÷ßÿý÷ßÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßýÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿ_þÿÿ¿ÿþûï¿ÿîï¿ÿþûï¿ÿþWÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿þÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿïÅÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿõÿï¿ÿþûï¿ÿþï¿ÿþûï¿ÿþÿùý÷ßÿý÷ßÿ÷ßÿý÷ßÿ¿|þùçŸþùæ_þùçŸþùçÿïÞÿý÷ßÿý÷ßïý÷ßÿý÷ßÿw§ŸþùçŸþùŸþùçŸþù·“û¿ÿþûï¿ÿþû¿ÿþûï¿ÿþûÿÕÿ÷ßÿý÷ßoÿõßÿý÷ßÿÿèÿÛo¯ýöÛo¿ýÚo¿ýöÛo¿ýÿpþÿÿ÷ÿÿÿÿýÿÿÿÿÿÿÿÿÿÿ»ùÿÿÿûÿßÿÿýÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïþÿÿÿÿÿóÿ?óÿÿÿÿÿÿÿÿÿÿÿÿþûï¿ÿþûëÿþûï¿ÿþûïÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ëûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷nÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ;øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—ÿßÿý÷ßÿýßÿý÷ßÿýnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ7üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWÿÿŸþùçŸþùŸþùçŸþù»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïõÿ×_ýõ×_ý×_ýõ×_ýÏþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÙÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿêÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿïGÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ùÿý÷ßÿý÷ßÿý÷ßÿý÷ßÿ7öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿½çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿùçŸþùçŸÿùçŸþùçoûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÇþÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþGÿýõ×_ýõ×ýõ×_ýõ×ýâÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸúÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿûÿýÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿ÷ÿþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿ_ÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÁÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿ~ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿGüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Áûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷gÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿWþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿý÷ßÿýßÿý÷ßÿýbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿoöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸþùçŸþùŸþùçŸþù·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}çÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿ~õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýôÿ×_ýõ×_ý×_ýõ×_õ?þÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿ7þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿ…ÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿ÷Éÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßüÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿOZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_øÿý÷ßÿý÷ßÿý÷ßÿý÷ßÿ—öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷þÿùçŸþùçŸÿùçŸþùçïûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßwþÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCÿýõ×_ýõ×ýõ×_ýõ×ÿîþÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸøÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿïžüÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿOþÿÿÿÿÿþÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ßÿíÿ÷ÿÿÿÿÿÿßÿÿ—ÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿÿÿßÿÇÿÿÿÿûï¿ÿÿýÿÿÿÿÿÿÿÿýîÿÿÿÿÿýÿÿÿþÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿï÷ïÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿ×þÿÿÿÿÿÿÿýýÿÿÿÿÿÿÿÿÿÿüÿÿŸŸù-÷ÿÿÿÿÿÿÿÿÿÿÿ˜õÿÿ_ë·Õ&úÿÿÿÿÿÿÿÿÿÿ¯×ûÿÿO»ï¾Yþÿÿÿÿÿÿÿÿÿÿ÷oÿÿÿó\{ͬÿÿÿÿÿÿÿÿÿÿÿoñÿÿÿÿ³Ç>ÿÿÿÿÿÿÿÿÿÿÿ¿ÛÿÿÿÿÕW_Ùõÿÿÿÿÿÿÿÿÿÿ›øÿÿÿÿÿãïeþÿÿÿÿÿÿÿÿÿÿ×þÿÿÿÿÕ÷rýÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½÷ÜóßÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿüóÎÿÿÿÿÿÿÿÿÿÿÿ‰ÿßÿýô×þýßÿý÷ßÿýoÿÿÿß¿Úi÷ýÿÿÿÿÿÿÿÿÿÿoòÿÿÿ÷ÿ{ïþÿÿÿÿÿÿÿÿÿÿÿ?èÿÿÿ¿ÿ÷ßÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿ7ûý·ßÿÿÿÿÿÿÿÿÿÿß+þÿÿÿïî»OÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸüùçŸ{þùŸþùçŸþñ¾ÿÿÿÿÿûï¿ÿÿÿÿÿÿÿÿÿÿÿÿÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}íÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿþ÷þÿÿÿûï¿ßþÿÿÿÿÿÿÿÿÿÿ¯ûÿÿÿ/¿óòÓÿïÿÿÿÿÿÿÿÿÿ•ÿ×_oýôÖ[}ý×_ýõ×_ýŸþÿÿÿïŸÞþ÷ÿßÿÿÿÿÿÿÿÿÿgþÿÿÿþÿÿ~ÿïÿïÿÿÿÿ¿ÿþÿ¥ÿÿÿÿûï¿ï¯ÿûÿÿÿÿÿÿÿÿÿÇÿÿÿŸ÷çßÿÿýÿÿÿÿÿÿÿÿÿàÿÿÿÿýÿÿ¿ïÿþÿÿÿÿÿÿÿÿõÿÿÿÿoÿóÍöÿÿÿÿÿÿÿýÿ?úÿÿÿÿÿöûÿÿÿÿÿÿÿÿÿÿÿßüÿÿÿÿÿÿ}÷ÿßÿÿÿÿÿÿÿÿÿ»þÿÿÿ¿ÿÿÿÿÿïÿÿÿÿÿÿÿÿïÿÿÿßûýÿÿÿ÷ÿÿÿÿÿÿÿÿÿ·ÿÿÿÿÿÿÿßþúÿÿÿÿÿÿÿÿÿÿÿÿÿÿï¿¿~ýÿÿÿÿÿÿÿÿÿâÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿ÷ÿÿ}ÀÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÏXÿÿÿÿÿûûÿÿÿÿÿÿÿÿÿÿÿÿ:½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿ÷ßÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿÿÿÿÿ÷޹þÿÿÿÿÿÿÿÿÿÿ§ýÿÿÿÿÿÿÛoÿÿÿÿÿÿÿÿÿÿ¿›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿíÿÿÿÿÿÿÿÿÿÿ?ùÿÿÿÿÿÿÿÿýÿÿÿÿÿÿÿÿÿÿ¿øÿý÷߯ýwÛÿý÷ßÿý÷ßÿ'öÿÿÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›þÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿÿÿÿoÿûÿÿÿÿÿÿÿÿÿ½áÿÿÿÿÿÿý÷ÿÿÿÿÿÿÿÿÿÿòÿÿùçŸþùçŸÿùçŸþùç¯ûÿÿÿÿÿÿþïÿÿÿÿÿÿÿÿÿÿÿ?ýÿÿÿÿÿÿý÷ßÿÿÿÿÿÿÿÿÿßþÿÿÿÿÿ¿ÿÿÿßÿÿÿÿÿÿÿÿï'ÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿ‚ÿÿÿÿÿÿo¿üÿÿÿÿïÿÿÿÿÿÿUÿýõ×_oýõ×õõ×_ýõ×ÿåÿÿÿÿÿóû×÷ÿýÿÿÿÿÿÿÿÿÿåÿÿÿÿ_ýÿû÷ïÿÿÿÿÿÿÿÿ¿ßûÿÿÿÿÿÿÿý÷¿ÿÿÿÿ¿ÿÿÿÿüÿÿÿÿú~üÿ×Ïÿÿÿÿÿÿÿÿ?þÿÿÿÿÿÿ×ïÿÿÿÿÿÿÿÿÿwÿÿÿÿïßÿîü÷÷ÿÿÿÿÿÿÜÿ‹ÿÿÿÿÿ»ýïßüÿÿÿÿÿÿýÿ÷ÿÓÿÿÿÿÿíÿÿÿýýÿÿÿÿÿÿÿÿýíÿÿÿÿÿøÿÿ?þþÿÿÿÿÿÿÿÿóÿÿÿÿÿûÿÿ¿ÿÿÿÿÿÿÿÿÿúÿÿÿÿŸþúë¯ÿÿÿÿÿÿÿëÿÿÿùÿÿÿÿÿÿÿ×ßÿÿÿÿÿÿÿ÷ÿÿçþÿÿÿÿÿÿÿýïÿÿÿÿÿÿÿýÿÿüÿÿŸ½ÿ¯ÿýÿÿÿÏÿÿÿÿÿÿ Õÿÿ_ú_ÿóÿúÿÿÿïÿÿ¿ÿÿ¯×ëÿÿO9§ÿÓïÿÿÿÿÿÿÿûÿ÷kÿÿÿ§úÿù÷þÿÿÿÿÿÿïÿÿoôÿÿÿß3±þ×ÃþÿÿÿÿÿÿÿïÿÿÛþÿÿ¯•~ÿ«6Öÿÿÿÿÿÿ¿ûÿÛyþÿÿ×ZÇÿÿ·ÿÿÿÿÿÿÿÿÿÿ7~ÿÿÿ{(×ÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿûoÿÿÿÿÿÿÿÿÿÿ·ÿÿÿÿß¿ù÷ßüÿÿÿÿÿÿÿÿÿŸÿßÿý¶ßmŸíßÿý÷ßÿýaÿÿÿÿ3ÏÿöÛÿÿÿÿÿÿÿÿÿÿoðÿÿÿÿßÿÿûÿÿÿÿÿÿÿÿÿÿ¿ëÿÿÿ¯ý÷ÿŸ/þÿÿÿÿÿÿïÿÿßüÿÿÿVûõûÿ×ÿÿÿÿÿÿÿïÿßËþÿÿÿëþÿÿþÏÿÿÿÿÿÿÿûÿÿwÿÿŸôùçŸ{ôùŸþùçŸþñ¢ÿÿÿÿþÿÿÿÿúÿÿÿÿÿÿÿÿÿÿÕÿÿÿÿýÿÿÿýÿÿÿÿÿÿÿÿÿ}êÿÿÿ¿ÿþûÿ¿þýÿÿÿÿÿÿÿÿþóÿÿÿûïýÿ_ÿÿÿÿÿÿÿÿÿÿïûÿÿÿïÿýßûïÿÿÿÿÿÿÿËÿÿŸõÿ×_ýÕ×_~ô×_ùÕ×[íŸþÿÿÿõ/úßÝ÷ßÿÿÏÿÿÿ¿ÿÿOþÿÿÿÿ÷ïŸÿÿÿ¿¿õÿÿ¿¿þÿ…ÿÿÿÿÿU÷ÿÿÿûÿÿÿÿÿÿÿÿÿß÷ÿÿ½ÿ_üýÿÿÿÿÿÿÿÿáûÿÿÿ]ÿ_ÿÿþÿÿÿÿÿëÿÿõÿÿÿ×ÿÝÿÞ^wÿÿÿÿÿóÏ=ûøþÿÿÿýÿÿÃÿ¿ÿÿÿýþÿÿÿÿýÿÿÿÿûöÿÿþßÿÿÿÿÿÿÿþÿÿÿÿÿÕÿÿ?ïÿÿûßÿÿøÿïÿÿÿÿ¿ýÿ½×ÿçÿÿýïÿÿ³ÿ÷—ÿÿÿÿÿï¿ÿöº¿ÿÿÿß¿ÿÿ[÷‡ÿÿÿÿ¿õÿýÏÿÿÿÿïÿýuêÿÿÿÿÿþûÿÿïÿÿÿÿÿ¿¿þýñÿÿÿÿÿÿÿOÿÿÿÿÿýÿÿýøÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_ðÿÿÿÿÓ}ÿÿ÷ÿÿßzóýŸÏÿÿSÖÿÿÿÿÉÿÿßãÿ_Þÿ_÷ï¿ïÿÿÿÿ7_Oÿ÷ÿÿóï¼þ㻾߳ýÿÿÿª¯·žûÿÿûoÿÿ÷Ýÿ¿Ýÿÿÿÿÿ·ò׿ýÿÿÿoŸßÃŽÿÿaÿÿÿÿÿÞ½¯®kÿÿÿÿn½öÛ[oåÿÿÿÿoõ÷ÿÿÿÿý•÷ÿþžøÿÿÿÿÿöúëÿÿÿÿÿ½Wÿßõ¿_ýÿÿÿÿÿãßþùŸÿÿþ²ÿÿÿí¿þÿÿÿÿÿý_þÿŸÿÿößoÿýGþÿý÷ß§½¶{¿ý÷}Ÿ=vÿ¹ýÿÿÿÿ?÷ÿ¿ýû÷ÿ}ÿÛwÿ¿Ýÿÿÿÿÿÿÿï¿ÿÿÿÿÿûßÿÿ¢ÿÿÿÿÿÚﯿþïçýÿÓÿÿÞÿÿòÿÿÿÿõí—_þïÿýñïýnïúÿÿÿÿ÷þûë¿ßÿùÿ÷ÿÿ¿ÿßüÿþùG}ôñçöùçŸþùÇ þÿÿÿÿ¿¿þûûÿÿÿÿ¿ÿÿþÿÿOÿÿÿÿÿß_ÿÿýÿÿÿÿÿÿÿÿÿ÷•ÿÿÿÿÿë¯ÿÿÿ÷ÿÿÿÿ¿ÿÿþûÑÿÿÿÿÿ·×ÿÿÿÿûï¿ßÿûÿ¿àÿÿÿÿÿòû??ýÿÿþÿþÊo¿ÿÔÿ_ýõÖ[}µÕýõ‡_?´µÿøÿÿÿÿßøßÿÿÿÏ?]ü½óýû¿øÿÿÿÿÿßóûõÿÿÿßïÿ¿ÿÿþÿÿÿÿ¯ÿÿÿÿï÷ú«³ÿÿïþÿGÿÿÿÿÿßÞïù×WÿÿW_|ý}ý»ÿÿýÿÿ¿¿»ÿýkÿþÿß[{ý»Ñÿÿÿÿÿýÿûÿýÿÿýõûw÷ìÿéÿÿÿÿÿßkÏÿÿûÿ?üôëGÿÿÿöÿÿÿÿÿÿÿ÷ÿ÷ÿûßýÿÞÿÿ~ùÿÿÿÿ?ÿ¿Óõžüóÿÿûí¿ÿ??ýÿÿÿÿÿþÏÿûoÿÿÿûÿÿ¿þÿÿÿÿßÿÿøÿìýk®ûêëëû?þÿÿÿÿÿÿÿÿ·?ÿû÷ßÿÿû÷ÿ¹ÿÿÿÿÿ¿ÿÿÿýßÿÿûïï·ÿûÿ ÿÿÿÿÿÿÿóã?ÿÿÿÿý?þÿÿ?jýÿÿÿÿÿÿÿóÿÿÿÿÿûßÿÿÿkðþÿÿÿÿÿ?Þóç÷ÿÿ;ÿüÿÿ=Ùÿÿÿÿÿß?ÿïóûÿÿÿž~ÿÿÿÛýÿÿÿÿÿßÿ¿úk¯þßï­nûïöÿÿÿÿÿÿkŸ½özÿ»óÚ+{ùñþÿÿÿÿÿûÿ¿þ_ÙŸ÷üyÿÿÿÿ­ÿÿÿÿÿÿ¸ÿ_þ¿ÿÿ>þåÿÿÿËÿÿÿÿÿÿÿíóÿÿü³ßûÿ·_ÿãÿÿÿÿÿïÿÿÖÿÿñþÿÿ÷_ÿâÿ÷ßÿýößgÿ·Û¿Ý÷ßwÛ_Ûÿÿÿÿÿcÿóÿÿ|ÿû÷ÿÿ÷ÿ»üÿÿÿÿÿíÿ_ÿÿßÿÿÿÿÿýÿ¿úÿÿÿÿÿý~ßýÿþßïïÿÿóŸ÷Wÿÿÿÿÿßþóæü÷çÿþýî÷žÿÿÿÿÿÿÿ¿ÿÿ¯÷ÞÿûÿÿÿoýËÿÿçŸþùÇŸ}ÖÇŸöù矼èÿÿÿÿÿ÷ïÿÿÿï?ÿøÿûÿÿÿÿöÿÿÿÿÿÿýÿÿÿ÷÷ÿýõÿÿŸúÿÿÿÿÿýÿûÿÿÏÿ¿ÿÿÿï¿ßüÿÿÿÿÿûÿ½¿ÿソûÿÿÿÿËþïÿÿÿÿ¿üöË»üÿþÿ¿üôÿÿGýÿõ×_¹Õ—_Ûõ×_{½ñ×_ë«ÿÿÿÿÿï÷?ûý÷ÿü¿þÿÿÿÿ“ÿÿþÿ÷ÿÿÿÿWÿWýóÿßoëÿÿÿÿÿÿÿÿÿÿþûß÷ÿÿÿÿñÿÿÿÿÿÿÿÿ_÷×ÿ_üuÇÿÿøÿÿÿÿÿÿÿ_¿þ×ÿ¯w»ïÿüÿÿÿÿÿÿÿÿßßïÿÿÿ~ý7ÿõþÿ÷ÿßÿÿÓÿsßÿÿï?çüßûÿÿÿÿÿÿÿÿ×÷ÿÿ¿÷ÿýÿw“ÿÿÿÿÿ÷ßþÿ½ûÿÿü+ÏúÿßþÓÿÿÿÿÿ÷ßÿÿýýÿþÿçÿïßÿåÿÿÿÿÿïÿŸþÿÿÿÿûÞ¯ÿÿâÿÿÿÿÿï¿ÿ~ÿÿÿÿoý¿ß~ÿßøÿÿÿÿÿûþÿ¿þÿÿÿ¿ÿÿ÷¿ÿßðÿÿÿÿß}÷ÿÿÿÿÿχ}þÿƒÖÿÿÿÿoýýÓÿÿÿßÿçÍÿÿ¿ïÿÿÿÿ·_þùgÞþÿï÷ëú/çߣýÿÿÿÿ»ÿþû.¿þÿïûÿæÿì¿Åÿÿÿÿÿ·×L7Íþïÿïoóî¿»þkÿÿÿÿÿÛå×Wÿóÿÿö­ñËkÏãÿÿÿÿÿýõ×_ÿýýÿmßþÿ÷øÿÿÿÿÿöß{üýûÿÿ¥ÿÛþoÿüÿÿÿÿÿûï?ÿþßÿÿöþËo¿ùÏþÿÿÿÿÿÿÿOýÿÿÿÿÿYÿýÿWþÿý÷߯Ý÷{ÿý÷Ÿ¤¹æû¡ýÿÿÿÿÿÝs¿ýýÿÿÿ÷Ý¿½Åÿÿÿÿÿÿÿýßÿÿÿÿÿûßßÿ®ÿÿÿÿÿß¿ýþëÿÿÿâwþøÿ÷ÿÿÿÿÿ·ÕwÝüEÿÿ}ýÏ¿_/úÿÿÿÿÿÿ?ï¾ûþÿÿûýÿû·ßŸüÿþùç}üñç}þùç—yî™Ãkþÿÿÿÿ¯ÿþúïÿÿÿŸ¿ûùÿÿõoÿÿÿÿÿ×ßý÷ÿÿÿÿß÷ÿÿÿ÷­ÿÿÿÿÿë¿ÿÿûçÿÿÿÿ¿ÿÿÿûÉÿÿÿÿÿµ÷þûíßþÿïßþÿÿ¿âÿÿÿÿÿöK¿üÿÿÿÿþÛ/ÿÿ÷Òÿ_ýõ×[µõ_ýõ×-õµ¿øÿÿÿÿ=øóË=óÿ?wòÿ;ÿøÿÿÿÿÿ÷ÿþÿÿÿÿÿïÿÿïïÿ7þÿÿÿÿ¯¿þúë¯þÿk¿úÿ÷ÿOÿÿÿÿÿßíýõWÿÿÿ×ýÿ÷ÿÿÿÿÿÿÿû¿ÿ÷[ÿÿßçÿþýýÿÍÿÿÿÿÿq‡?g½ýÿ¿÷ýÿÿÿêÿÿÿÿ÷ÿËÿÿýÿïÿÿØéïÿûÿ÷ÿÿÿÿÿÿÿÿ~ß·ÿûŸÿß÷ÿ>ùÿÿÿÿ?ÿÿóÿ¾ìóÏÿÿèÿÏÿüÿÿÿÿÿþÿïÿûï¿ÿÿ}ß¿½/þÿÿÿÿÿþø½ú}çÿýþòçß'þÿÿÿÿß?ÿýÿïÿÿßÿvýñ÷—ÿÿÿÿÿ÷ßÿÿïþÿþÿ¯ÿÿÿó ÿÿÿÿÿýÿÿÿ¿þÿÿÿ?ùüÿ¿oýÿÿÿÿþÿÿž÷ï¿ÿßßõþÿëñþÿÿÿ?ÿÒYû·×_/¿þ¿xÿ¥Ûÿÿÿÿ¿Ÿë¯ÿÿ묧ßÿßéçýÿÿÿÿÿû¼ßÿíü×ÿ—»ôÿËwöÿÿÿÿÿýÞ¿¶+®©ÿþkêÿöþÿÿÿÿ×~ÿõýõ×ßý·£ÿÿÿÿÿkå¿Wúï¾Îúû?³þþÿÕÿÿÿÿÿ¿ÿùûß¿ü÷ÿÿíçÿyîÿÿÿÿÿßÿùý_ŸõןýÿçÛ}àÿ÷ßÿýöÛßçÝ|¿=öÛoߟÚÿÿÿÿß3ÿ>ÿÿß?÷í¿}öÝüÿÿÿÿý÷ÿÿÿÿ÷ÿýÿï¿ÿûŸúÿÿÿÿ¿½þÚë¿ùÚé¿ÿûÿÿÿÿÿÿÿÿW~÷åß|õijÿïóW÷Šÿÿÿÿÿï¿·þÿóÿúÿÿúßûýÑÿÿçŸôùÇŸ¾ç}þÙçŸ}¼æÿÿÿÿÿûë¿ÿþßÿ¿þûÿïÿÿóÿÿÿÿý÷ÿßÿÿÿ_ÿÿÿßùÿÿÿÿÿþûï¿÷ÿ¿ÿÿÿÿ¿¿_ýÿÿÿÿ_ûÿ¿÷ÿï¿×þÿÿ¿ßþ[þÿÿÿÿoÿûö»ÿýöË?ÿÿÿÿÿ7ÿÿõ×_{ýõV_ùÓ]}ýÕ×_ûƒÿÿÿÿÿ³ÿ¿ÿ½g¿ÿÿ÷ýøÿÿ‹ÿÿÿÿÿïÿÿþÿwÿÿÿþ>O½ûâÿÿÿÿÿÿÿ÷ÿþ÷þÿïÿûÿÿóÿÿÿÿÿÿïÞSn÷ç_ïïÔÇýÿßóÿ¿ÿÿÿÿÿ÷w¿þÿŸÿûú÷þÿ?¸ÿÿÿÿÿßÿÿÖßÜÿÿÿ]ÿÿÿìÿÿÿÿÿÿÿZÓÿýòߎ¿ýßßÿÿÿÿÿÿÿÿÿ÷÷ïÿþÿ{þÿÿóÿÿÿÿøÿþÿïûÿÿÿÿüÞ9¿ÿÉÿÿÿÿýÿßÿÿ¿ùýÿïÿÿÿÿÿÿäÿÿÿÿÿÿ¯¿ž~ëÿÿÚëÿÿÿÿóÿÿÿÿÿÿõWzÿ×ûûýýöÿÿÿ¿øÿÿÿÿÿÿþû¿ÿýÿÿúþýÿþþ?ðÿÿ~ÿå÷ÿÿÿýÿÿgÿÿÿÿ;ÖÿÿÝÿÖûÿÿÿÿùÿÿ×þÿÿ¿Fïÿÿÿï—ÿ~?åß~»äšßþÿÿ\ºýÿÿÿwëçžnîòÚî»?ÿÿ?¿ÍÿÿÿÿÕÿ~¿ÿ÷ÿŸÿîºÿÿÿ`ÿÿÿÿÿúÿïÆÿ»ÿÆ¿½÷ÿÿOæÿÿÿÿßÒÿ½ÿ_ÿýÿÿ7ùÿÿÿÿ¿V_ëïÿ~ýï¿þwýÿÿý÷ÿÿÿÿûkÿÿìÏ¿ÿýþßþÿÿgþÇÿÿÿÿüùÿ¿ýsÿÿuÿ›ÿÿÿOþÿý÷Ûo¼ý÷y¯½v›oýý÷û‰ýÿÿÿŸ=óíÿßþÝ}óýÿÿüÛÿÿÿÿ¿ÿýÿÿÿ÷÷¿ÿýÿÿÿ­ÿÿÿÿ×Ú¿÷ÿÿ¯¿~ç¿ÿÿÿÿðÿÿÿÿ|ÕÅ“ÿµÇW_ýñßÿÿ¯ûÿÿÿ÷¿Þ³ï¿ûßë¬ÿ{ïÿÿßßýÿþùG}ôÙç}ôÑf_þùÇûþÿÿÿë¿ÿùÿÿÿùûûÿÿïÿÿÿoÿÿÿÿõ÷ßÿÿÿ÷ßÿßÿÿ÷•ÿÿÿÿúïÿÿÿú§ÿþúÿÿÿÿÿûÏÿÿÿí½÷Þí×Þ{í·ÿþÿÿ¿êÿÿÿÿÿÿ¿ÿ¿ÿÛO?½ÿÿÿÿwôÿ_ýõ×_{ÕÕOuµ•W_}õµ?ûÿÿÿÿþþóÿ?ðÏ?ÿøïÿÿÿÿøÿÿÿÿÿÿ|ÿûÿûÿÿýýÿÿÿÿ‡þÿÿÿÿßÿÿÿ˯þúë¯ÿùÿÿÿ?þÿÿÿ÷×_½õ‡ø÷ÿ¿ÿÿÿµÿÿÿÿÿï^þûûÿ¿ÿÚûÿïÿ‰ÿÿÿÛqÿÿÿ¹ÿÿÿÏ?ûßîÿýÿýÿÿëÿÿÿÿÿÿßë¯ÿûò¿ÿÿÿÿ¿ÿ~û_ÿûÿÿÿÿÿÿ¿~ùÿÿÿÿ?ÿìñÿŸÿÿÿÿÿÿÿ÷o_ýÿÿÿÿÿ~ûïûŸÿÿÿÿÿÿÿÿ¿/þÿÿÿÿýùýÿÿÿÿ÷ß¾{ÿÿoÿÿÿÿÿßÿïýÿÿöÿÿÿ¿õÿÿ«ÿÿÿÿÿ÷ÿ¿þÿÿÿÿÿÿÏ>ÿÿÿWÿÿÿÿÿý|óÿÿÿÿÿÿÿÿßÿÿ¿lýÿÿÿÿ~Ýåýÿÿÿÿÿÿï¿ÿÿoòþÿÿÿ?­ÿÿÿÿÿÿÿ¿ü÷ÿÿáÙÿÿÿÿ¿ÿþûÿÿÿÿÿÿŸûÿÿÿ«øÿÿÿÿß{å·úÿÿÿÿÿÿÿüúÿ×öÛÿÿÿ¿™úªýÿÿÿÿÿÿ+¯ýÿ@þÿÿÿÿ÷߯½ÿÿÿÿÿÿßÿÿo¯ÿÿÿÿÿo唲ÿÿÿÿÿÿ¿ÿÿÿÿ÷ÿÿÿÿ?»üòÿÿÿÿÿÿÿýÿÿÿëÿÿÿÿÿ_žqÖÿÿÿÿÿÿÿõ÷ÿÿåÿ÷ßÿýçŸ}ÿ÷ßÿýöÝ}ÿÚÿÿÿÿÿóßÿÿÿÿÿÿ?ÿýÿÿßýÿÿÿÿÿÿ÷ßÿÿÿÿÿÿßßÿÿÿŸþÿÿÿÿï½ðÃÿÿÿÿÿÿ¿ÿÿÿÿ/ÿÿÿÿÿw[ìñÿÿÿÿÿÿo¾ûÿ÷†ÿÿÿÿÿë¿ÿîÿÿÿÿÿÿïÿÿÿÿÓÿÿçŸô±ÇžþçŸþÙ矼éÿÿÿÿÿÿß?ÿÿÿÿÿÿÿÿ¿ÿÿÿðÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿ÷ÿ_ùÿÿÿÿÿþóÏÿÿÿÿÿÿþëÿ¿ýÿÿÿÿ{ï½ÿÿÿÿÿÿÿÿýÿÿëüÿÿÿÿo¿øþÿÿÿÿÿÿ¿ýôÿÿwÿÿô×^~ÝõW_ÿÕ×_}½UW_ûŸÿ÷ÿÿÿ³?sÞÿ÷ÿÿÿÿïÿÿÿþ“ÿÿÿÿÿÿsÿÿÿÿÿÿÿÿÿ¿ûíÿÿÿÿÿÿïÿÿÿþÿÿÿÿÿ÷ÿÿÿóÿÿÿÿÍõÿÿþÿÿÿ¿Ñ×ÿÿxúÿÿÿÿÿþõÿÿ¿ÿÿÿÿ¿ýëÿÿ/ýÿÿÿÿßÿÿÿÿŸÿÿÿÿÿüóÿÿ·þÿÿß¿|÷ßÿý÷ß¿¿þÿÿÿûû÷ßÿÿ¿¿þ÷ÿÿÿÿßÿÿÿ«ÿÿÿÿÿÿÍÿûÿûÿÿÿÿý÷ÿÿÿÒÿÿÿÿßÿ×ÿÿÿýÿïÿÿÿûÿÿÿìÿÿÿÿÿ³üÿÿÿÿÿÿï½ÿÿàÿÿÿÿÿÿöûýÿÿÿÿÿÿûïÿÿ?úÿÿÿÿ¿ÿûÿÿÿÿÿÿ÷ÿÿÿýÿñÿŸ}~ÙÏÿÿÿÿÿÿÿÿÿÿÿÿëÖÿ_~µå×ÿÿÿÿÿÿÿÿÿþÛÿ¿~ïÿ¯;å·sÿÿÿÿÿÿÿôÞçý^ªýÿÿsÏïÿÿÿÿÿÿÿûýóþ?¿Ýÿÿ_ÿ-¼Óþÿÿÿÿÿÿÿõï¯ÿ{nÿÿ¯ÿgž¨öÿÿÿÿÿÿï¿òÚÿïåÿÿß_ÿ÷þÿÿÿÿÿÿýßÿÿŸøÿÿo¼ýÆÎþÿÿÿÿÿ¿ÿÿïÿÿ¿üÿÿ¿ÿþûËÿÿÿÿÿÿÿ÷ßÿÿÿþÿÿÏýýÿÿÿÿÿÿÿÇÿÿ_þÿý÷Ùúý÷ÿý÷Ûo¿}÷ÿýÿßs=ÿýÿÿÿÿÿÿüöÏÿÿÿÏÿÿ÷ß¿ÿÿÿÿÿÿÿßÿþ÷ÿÿÿ®ÿÿï½÷ß ÿÿÿÿÿÿÿûëïÿÿÿôÿÿ_yýµÇÿÿÿÿÿÿûåŸÿoúÿÿû¯ÿÿûÿÿÿÿÿÿÿÿúûÿÿßýÿöÑg{þùçþùç}öùÇûþÿÿúû¿ÿüÿÿÿÿÿÿ¿¿þÿÿÿ7ÿÿý÷×ÿÿÿÿÿÿÿ÷_ÿÿÿÿ«ÿÿ¿þÿï?ÿÿÿ÷ÿÿÿÿï¿ÿÿÿÔÿÿ_ûïµ÷þÿÿÿÿÿÿÿÿÿÿÿÿäÿÿ¿ÿöÿÿÿÿÿÿÿÿõÏÿÿÿÿÒÿ_ÝÅW}õÕ_}õÕ_zùõÿûÿÿ»?Û÷ÿÿoÿÿÿÿÿÿÿÿÿßùÿÿ~óÿ;ÿÿûÿÿÿÿÿÿÿÿÿÿçþÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿßÿÿÿõ×ÿÿ÷ÿï÷¿ÿÿÿÛýÿÿŸÿÿ¾ÿ¿ýþûïÿóÿÿÿÿ~¿ÿÁÿßÿ÷ÿÿÿýÍÿÿò}ÿÿýÿäÿûÿïìÿÿ?ÿùOÿÿúßÿ¯ÿòÿçÿÿÿÿÿ×ýß÷¿ÿÿÿ}þÿúßÿÿÿÿ¯ÿýÿ¿ÿÿ÷ÿÿÿ¿ÿÿŸüÿïÿÿÿßÿÿÿßÿÿÿÿý÷ÿÿÿÿþÿÿÿï¯ÿþÿÿßÿÿÿÿýÿû®ÿ/þýr_ÿÿõ_ÿÿÿÿûÿîÿ¹ÿßÿÿû÷Ïÿÿßÿýÿÿÿÿÿßþÿ×ýŸ}ÖÛG§þù›þùgŸ~øîÿÿ~ûï·×_ÿýß_ÿý—ßýõÿ÷ž}÷¹÷ßÿößÿý÷Ýÿÿùÿÿý÷ßÿÿÿÿÿÿÿÿßÿþÿÿ_üÿõÿßûÿý÷ßÿý÷ßóÝ÷ßÿÿþ?ß|óÏ6ÿüó?ÿüóÏ?¿üóÿ'÷ß~ÿí÷ßÿýßÿý÷Ûoÿýï—ÿŸÿý÷ß~úéŸ~úé§Ÿ~úéÿÙÿï¿ÿþûï¿ÿþï¿ÿþûï¿ÿþÿàÿÿ~ûí·ßþûïÿþûÿ¿ÿÿûïòÿûï¿ßÞÛï¿}ûo¿ÿ¾ûî¿ÿ¿ûÿûÏ·ÿøûï¿¿ûï¿ÿþÿï¿ïÿüÿûï¿ÿþûï¿ÿ»ï¿ÿúûï¿ÿ/Þÿßÿý÷ÿÿÿßÿÿÿÿÿÿÿÿûÿÿÿûï¿÷þÿþ÷ÿÿÿÿÿÿÿÿ¿—ÿÿûï¿ÿþûï¿óûïÿÿþÿï¿ßÇÿÿÿÿÿÿÿ÷ßÿÿÿÿþûÿÿßÿÿîÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿþÿôÿ÷Î;ï<óß÷ßýÿßùÿÿÿÿÿÿÿý÷¿ÿÿïÿÿÿÿûÿýÿÿÿÿÿÿÿÿÿÿÿÿ÷ßÿÿÿÿÿoþ??üðÃ?üð3?üðÍÏßüðóÿ¿ÿþûï¿ÿþû·ÿþûïÿþûÿ³ÿÿýóÏ?ÿþÿÿÿÿÿÿÿÿÿÿÿÿËÿÿöÛoŸý÷ßÿ÷ßÿÿõÿß~îÿî<òÈ3¿ÿÞï½÷÷·ÿÞþõÿÿ \ No newline at end of file diff --git a/iidx/ezusb/firmware/v2/sram.bin b/iidx/ezusb/firmware/v2/sram.bin new file mode 100755 index 0000000..bb4ac02 Binary files /dev/null and b/iidx/ezusb/firmware/v2/sram.bin differ diff --git a/iidx/ezusb2/README.md b/iidx/ezusb2/README.md new file mode 100644 index 0000000..7b5301f --- /dev/null +++ b/iidx/ezusb2/README.md @@ -0,0 +1,3 @@ +# Ezusb FX2, aka IO2 +* [driver](driver/README.md): Drivers for various platforms. +* [firmware](firmware/README.md): Firmware binary blob required by the games. diff --git a/iidx/ezusb2/driver/README.md b/iidx/ezusb2/driver/README.md new file mode 100644 index 0000000..943221d --- /dev/null +++ b/iidx/ezusb2/driver/README.md @@ -0,0 +1,39 @@ +# Drivers for Ezusb FX2, aka IO2 +Currently, this package offers drivers for the following platforms: +* Windows XP: x86, x64 +* Windows Vista: x86, x64 (which you will never need...) +* Windows 7: x86, x64 +* Windows 8: x86, x64 +* Windows 8.1: x86, x64 +* Windows 10: x86, x64 + +## Installing on Windows XP +* Plug in the device and Windows should recognize it automatically +* Do not connect to Windows Update to search for software if prompted +* "Install from a list or specific location (Advanced)" -> Next +* "Don't search. I will choose the driver to install" -> Next +* "Have Disk..." -> "Browse..." -> Select the xp/x86 subfolder containing the +*sys* and *inf* file +* Select the device "Cypress FX2LP No EEPROM Device" from the list -> +Next +* That should be it + +## Installing on Windows Vista, 7, 8, 8.1 +* Plug in the device and Windows should recognize it automatically +* "Browse my computer for driver software" -> Next +* "Let me pick from a list of device drivers on my computer" -> Next +* "Have Disk..." -> "Browse..." -> Select your target platform, e.g. Win 7, and +architecture, e.g. x64 +* Select the device "Cypress FX2LP No EEPROM Device" from the list -> +Next +* That should be it + +## Flashing of firmware +In order to use the hardware with the game, you have to flash the correct +firmware to the device. Follow the (firmware guide)[../firmware/README.md] for +this. + +## Testing +Instead of using the games, use one of the tools included with BT5 to test and +debug issues as it will error on more fine granular level. Furthermore, you +can also check the source code for details and to track down any unknown issues. diff --git a/iidx/ezusb2/driver/vista/x64/WdfCoInstaller01009.dll b/iidx/ezusb2/driver/vista/x64/WdfCoInstaller01009.dll new file mode 100755 index 0000000..1731b96 Binary files /dev/null and b/iidx/ezusb2/driver/vista/x64/WdfCoInstaller01009.dll differ diff --git a/iidx/ezusb2/driver/vista/x64/cyusb3.cat b/iidx/ezusb2/driver/vista/x64/cyusb3.cat new file mode 100755 index 0000000..040c6f9 Binary files /dev/null and b/iidx/ezusb2/driver/vista/x64/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/vista/x64/cyusb3.inf b/iidx/ezusb2/driver/vista/x64/cyusb3.inf new file mode 100755 index 0000000..aa53933 --- /dev/null +++ b/iidx/ezusb2/driver/vista/x64/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for Windows Vista +; Processor support for OS unknown platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.9 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/vista/x64/cyusb3.sys b/iidx/ezusb2/driver/vista/x64/cyusb3.sys new file mode 100755 index 0000000..663d6af Binary files /dev/null and b/iidx/ezusb2/driver/vista/x64/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/vista/x86/WdfCoInstaller01009.dll b/iidx/ezusb2/driver/vista/x86/WdfCoInstaller01009.dll new file mode 100755 index 0000000..30e81af Binary files /dev/null and b/iidx/ezusb2/driver/vista/x86/WdfCoInstaller01009.dll differ diff --git a/iidx/ezusb2/driver/vista/x86/cyusb3.cat b/iidx/ezusb2/driver/vista/x86/cyusb3.cat new file mode 100755 index 0000000..a8076b2 Binary files /dev/null and b/iidx/ezusb2/driver/vista/x86/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/vista/x86/cyusb3.inf b/iidx/ezusb2/driver/vista/x86/cyusb3.inf new file mode 100755 index 0000000..9f881e1 --- /dev/null +++ b/iidx/ezusb2/driver/vista/x86/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for Windows XP +; Processor support for x86 based platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.9 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/vista/x86/cyusb3.sys b/iidx/ezusb2/driver/vista/x86/cyusb3.sys new file mode 100755 index 0000000..1a473cf Binary files /dev/null and b/iidx/ezusb2/driver/vista/x86/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win10/x64/cyusb3.cat b/iidx/ezusb2/driver/win10/x64/cyusb3.cat new file mode 100644 index 0000000..9d8800c Binary files /dev/null and b/iidx/ezusb2/driver/win10/x64/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win10/x64/cyusb3.inf b/iidx/ezusb2/driver/win10/x64/cyusb3.inf new file mode 100644 index 0000000..6d07881 --- /dev/null +++ b/iidx/ezusb2/driver/win10/x64/cyusb3.inf @@ -0,0 +1,290 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2017 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=11/08/2017,1.2.3.20 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 +; + + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers +CoInstaller_CopyFiles = 11 + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NTx86,NTamd64 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 +%VID_04B4&PID_00F2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F2 +%VID_04B4&PID_00F4.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F4 +%VID_04B4&PID_F650&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_F650&MI_00 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0078.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0078 + +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 +%VID_04B4&PID_521A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_00 +%VID_04B4&PID_521A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_01 +%VID_04B4&PID_5218&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_00 +%VID_04B4&PID_5218&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_01 +%VID_04B4&PID_5218&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_02 +%VID_04B4&PID_5219&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_00 +%VID_04B4&PID_5219&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_03 +%VID_04B4&PID_00FB&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FB&MI_02 +%VID_04B4&PID_0033&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0033&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 +%VID_04B4&PID_00F2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F2 +%VID_04B4&PID_00F4.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F4 +%VID_04B4&PID_F650&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_F650&MI_00 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0078.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0078 + +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 +%VID_04B4&PID_521A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_00 +%VID_04B4&PID_521A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_01 +%VID_04B4&PID_5218&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_00 +%VID_04B4&PID_5218&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_01 +%VID_04B4&PID_5218&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_02 +%VID_04B4&PID_5219&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_00 +%VID_04B4&PID_5219&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_03 +%VID_04B4&PID_00FB&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FB&MI_02 +%VID_04B4&PID_0033&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0033&MI_01 + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +; + + +[CoInstaller_AddReg] +; + + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.15 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00F2.DeviceDesc="Cypress FX3 GPIF II Slave example project" +VID_04B4&PID_00F4.DeviceDesc="Cypress FX3 GPIF II Master example project" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0078.DeviceDesc="Cypress EZ-PD Analyzer" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" +VID_04B4&PID_521A&MI_00.DeviceDesc="Billboard USB-I2C Bridge Vendor 1" +VID_04B4&PID_521A&MI_01.DeviceDesc="Billboard USB-I2C Bridge Vendor MFG" +VID_04B4&PID_5218&MI_00.DeviceDesc="Billboard USB-I2C Bridge Vendor 1" +VID_04B4&PID_5218&MI_01.DeviceDesc="Billboard USB-I2C Bridge Vendor 2" +VID_04B4&PID_5218&MI_02.DeviceDesc="Billboard Bridge Vendor MFG" +VID_04B4&PID_5219&MI_00.DeviceDesc="Billboard USB-I2C Bridge Vendor 1" +VID_04B4&PID_5219&MI_03.DeviceDesc="Billboard Bridge Vendor MFG" +VID_04B4&PID_F650&MI_00.DeviceDesc="CCG3 I2CM Bridge Vendor" +VID_04B4&PID_00FB&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0033&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win10/x64/cyusb3.pdb b/iidx/ezusb2/driver/win10/x64/cyusb3.pdb new file mode 100644 index 0000000..831154f Binary files /dev/null and b/iidx/ezusb2/driver/win10/x64/cyusb3.pdb differ diff --git a/iidx/ezusb2/driver/win10/x64/cyusb3.sys b/iidx/ezusb2/driver/win10/x64/cyusb3.sys new file mode 100644 index 0000000..d38d136 Binary files /dev/null and b/iidx/ezusb2/driver/win10/x64/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win10/x86/cyusb3.cat b/iidx/ezusb2/driver/win10/x86/cyusb3.cat new file mode 100644 index 0000000..c593150 Binary files /dev/null and b/iidx/ezusb2/driver/win10/x86/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win10/x86/cyusb3.inf b/iidx/ezusb2/driver/win10/x86/cyusb3.inf new file mode 100644 index 0000000..6d07881 --- /dev/null +++ b/iidx/ezusb2/driver/win10/x86/cyusb3.inf @@ -0,0 +1,290 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2017 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=11/08/2017,1.2.3.20 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 +; + + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers +CoInstaller_CopyFiles = 11 + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NTx86,NTamd64 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 +%VID_04B4&PID_00F2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F2 +%VID_04B4&PID_00F4.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F4 +%VID_04B4&PID_F650&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_F650&MI_00 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0078.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0078 + +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 +%VID_04B4&PID_521A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_00 +%VID_04B4&PID_521A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_01 +%VID_04B4&PID_5218&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_00 +%VID_04B4&PID_5218&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_01 +%VID_04B4&PID_5218&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_02 +%VID_04B4&PID_5219&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_00 +%VID_04B4&PID_5219&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_03 +%VID_04B4&PID_00FB&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FB&MI_02 +%VID_04B4&PID_0033&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0033&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 +%VID_04B4&PID_00F2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F2 +%VID_04B4&PID_00F4.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F4 +%VID_04B4&PID_F650&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_F650&MI_00 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0078.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0078 + +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 +%VID_04B4&PID_521A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_00 +%VID_04B4&PID_521A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_521A&MI_01 +%VID_04B4&PID_5218&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_00 +%VID_04B4&PID_5218&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_01 +%VID_04B4&PID_5218&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5218&MI_02 +%VID_04B4&PID_5219&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_00 +%VID_04B4&PID_5219&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_5219&MI_03 +%VID_04B4&PID_00FB&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FB&MI_02 +%VID_04B4&PID_0033&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0033&MI_01 + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +; + + +[CoInstaller_AddReg] +; + + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.15 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00F2.DeviceDesc="Cypress FX3 GPIF II Slave example project" +VID_04B4&PID_00F4.DeviceDesc="Cypress FX3 GPIF II Master example project" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0078.DeviceDesc="Cypress EZ-PD Analyzer" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" +VID_04B4&PID_521A&MI_00.DeviceDesc="Billboard USB-I2C Bridge Vendor 1" +VID_04B4&PID_521A&MI_01.DeviceDesc="Billboard USB-I2C Bridge Vendor MFG" +VID_04B4&PID_5218&MI_00.DeviceDesc="Billboard USB-I2C Bridge Vendor 1" +VID_04B4&PID_5218&MI_01.DeviceDesc="Billboard USB-I2C Bridge Vendor 2" +VID_04B4&PID_5218&MI_02.DeviceDesc="Billboard Bridge Vendor MFG" +VID_04B4&PID_5219&MI_00.DeviceDesc="Billboard USB-I2C Bridge Vendor 1" +VID_04B4&PID_5219&MI_03.DeviceDesc="Billboard Bridge Vendor MFG" +VID_04B4&PID_F650&MI_00.DeviceDesc="CCG3 I2CM Bridge Vendor" +VID_04B4&PID_00FB&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0033&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win10/x86/cyusb3.pdb b/iidx/ezusb2/driver/win10/x86/cyusb3.pdb new file mode 100644 index 0000000..032e683 Binary files /dev/null and b/iidx/ezusb2/driver/win10/x86/cyusb3.pdb differ diff --git a/iidx/ezusb2/driver/win10/x86/cyusb3.sys b/iidx/ezusb2/driver/win10/x86/cyusb3.sys new file mode 100644 index 0000000..bd007ba Binary files /dev/null and b/iidx/ezusb2/driver/win10/x86/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win7/x64/WdfCoinstaller01011.dll b/iidx/ezusb2/driver/win7/x64/WdfCoinstaller01011.dll new file mode 100755 index 0000000..d49d291 Binary files /dev/null and b/iidx/ezusb2/driver/win7/x64/WdfCoinstaller01011.dll differ diff --git a/iidx/ezusb2/driver/win7/x64/cyusb3.cat b/iidx/ezusb2/driver/win7/x64/cyusb3.cat new file mode 100755 index 0000000..d8b0e22 Binary files /dev/null and b/iidx/ezusb2/driver/win7/x64/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win7/x64/cyusb3.inf b/iidx/ezusb2/driver/win7/x64/cyusb3.inf new file mode 100755 index 0000000..a5eb822 --- /dev/null +++ b/iidx/ezusb2/driver/win7/x64/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01011.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.11 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win7/x64/cyusb3.sys b/iidx/ezusb2/driver/win7/x64/cyusb3.sys new file mode 100755 index 0000000..b0c225c Binary files /dev/null and b/iidx/ezusb2/driver/win7/x64/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win7/x86/WdfCoinstaller01011.dll b/iidx/ezusb2/driver/win7/x86/WdfCoinstaller01011.dll new file mode 100755 index 0000000..e943ea4 Binary files /dev/null and b/iidx/ezusb2/driver/win7/x86/WdfCoinstaller01011.dll differ diff --git a/iidx/ezusb2/driver/win7/x86/cyusb3.cat b/iidx/ezusb2/driver/win7/x86/cyusb3.cat new file mode 100755 index 0000000..e272126 Binary files /dev/null and b/iidx/ezusb2/driver/win7/x86/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win7/x86/cyusb3.inf b/iidx/ezusb2/driver/win7/x86/cyusb3.inf new file mode 100755 index 0000000..a5eb822 --- /dev/null +++ b/iidx/ezusb2/driver/win7/x86/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01011.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.11 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win7/x86/cyusb3.sys b/iidx/ezusb2/driver/win7/x86/cyusb3.sys new file mode 100755 index 0000000..0988597 Binary files /dev/null and b/iidx/ezusb2/driver/win7/x86/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win8.1/x64/WdfCoinstaller01011.dll b/iidx/ezusb2/driver/win8.1/x64/WdfCoinstaller01011.dll new file mode 100755 index 0000000..d49d291 Binary files /dev/null and b/iidx/ezusb2/driver/win8.1/x64/WdfCoinstaller01011.dll differ diff --git a/iidx/ezusb2/driver/win8.1/x64/cyusb3.cat b/iidx/ezusb2/driver/win8.1/x64/cyusb3.cat new file mode 100755 index 0000000..f5a759d Binary files /dev/null and b/iidx/ezusb2/driver/win8.1/x64/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win8.1/x64/cyusb3.inf b/iidx/ezusb2/driver/win8.1/x64/cyusb3.inf new file mode 100755 index 0000000..a5eb822 --- /dev/null +++ b/iidx/ezusb2/driver/win8.1/x64/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01011.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.11 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win8.1/x64/cyusb3.sys b/iidx/ezusb2/driver/win8.1/x64/cyusb3.sys new file mode 100755 index 0000000..a1ab6da Binary files /dev/null and b/iidx/ezusb2/driver/win8.1/x64/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win8.1/x86/WdfCoinstaller01011.dll b/iidx/ezusb2/driver/win8.1/x86/WdfCoinstaller01011.dll new file mode 100755 index 0000000..e943ea4 Binary files /dev/null and b/iidx/ezusb2/driver/win8.1/x86/WdfCoinstaller01011.dll differ diff --git a/iidx/ezusb2/driver/win8.1/x86/cyusb3.cat b/iidx/ezusb2/driver/win8.1/x86/cyusb3.cat new file mode 100755 index 0000000..622de75 Binary files /dev/null and b/iidx/ezusb2/driver/win8.1/x86/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win8.1/x86/cyusb3.inf b/iidx/ezusb2/driver/win8.1/x86/cyusb3.inf new file mode 100755 index 0000000..a5eb822 --- /dev/null +++ b/iidx/ezusb2/driver/win8.1/x86/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01011.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.11 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win8.1/x86/cyusb3.sys b/iidx/ezusb2/driver/win8.1/x86/cyusb3.sys new file mode 100755 index 0000000..41d1211 Binary files /dev/null and b/iidx/ezusb2/driver/win8.1/x86/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win8/x64/WdfCoinstaller01011.dll b/iidx/ezusb2/driver/win8/x64/WdfCoinstaller01011.dll new file mode 100755 index 0000000..d49d291 Binary files /dev/null and b/iidx/ezusb2/driver/win8/x64/WdfCoinstaller01011.dll differ diff --git a/iidx/ezusb2/driver/win8/x64/cyusb3.cat b/iidx/ezusb2/driver/win8/x64/cyusb3.cat new file mode 100755 index 0000000..9d9e9d7 Binary files /dev/null and b/iidx/ezusb2/driver/win8/x64/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win8/x64/cyusb3.inf b/iidx/ezusb2/driver/win8/x64/cyusb3.inf new file mode 100755 index 0000000..a5eb822 --- /dev/null +++ b/iidx/ezusb2/driver/win8/x64/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01011.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.11 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win8/x64/cyusb3.sys b/iidx/ezusb2/driver/win8/x64/cyusb3.sys new file mode 100755 index 0000000..a1ab6da Binary files /dev/null and b/iidx/ezusb2/driver/win8/x64/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/win8/x86/WdfCoinstaller01011.dll b/iidx/ezusb2/driver/win8/x86/WdfCoinstaller01011.dll new file mode 100755 index 0000000..e943ea4 Binary files /dev/null and b/iidx/ezusb2/driver/win8/x86/WdfCoinstaller01011.dll differ diff --git a/iidx/ezusb2/driver/win8/x86/cyusb3.cat b/iidx/ezusb2/driver/win8/x86/cyusb3.cat new file mode 100755 index 0000000..7ff2b59 Binary files /dev/null and b/iidx/ezusb2/driver/win8/x86/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/win8/x86/cyusb3.inf b/iidx/ezusb2/driver/win8/x86/cyusb3.inf new file mode 100755 index 0000000..a5eb822 --- /dev/null +++ b/iidx/ezusb2/driver/win8/x86/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for %OPERATING_SYSTEM% +; Processor support for %PLATFORM% platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01011.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01011.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01011.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.11 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/win8/x86/cyusb3.sys b/iidx/ezusb2/driver/win8/x86/cyusb3.sys new file mode 100755 index 0000000..7fd554a Binary files /dev/null and b/iidx/ezusb2/driver/win8/x86/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/xp/x64/WdfCoInstaller01009.dll b/iidx/ezusb2/driver/xp/x64/WdfCoInstaller01009.dll new file mode 100755 index 0000000..1731b96 Binary files /dev/null and b/iidx/ezusb2/driver/xp/x64/WdfCoInstaller01009.dll differ diff --git a/iidx/ezusb2/driver/xp/x64/cyusb3.cat b/iidx/ezusb2/driver/xp/x64/cyusb3.cat new file mode 100755 index 0000000..040c6f9 Binary files /dev/null and b/iidx/ezusb2/driver/xp/x64/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/xp/x64/cyusb3.inf b/iidx/ezusb2/driver/xp/x64/cyusb3.inf new file mode 100755 index 0000000..aa53933 --- /dev/null +++ b/iidx/ezusb2/driver/xp/x64/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for Windows Vista +; Processor support for OS unknown platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.9 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/xp/x64/cyusb3.sys b/iidx/ezusb2/driver/xp/x64/cyusb3.sys new file mode 100755 index 0000000..663d6af Binary files /dev/null and b/iidx/ezusb2/driver/xp/x64/cyusb3.sys differ diff --git a/iidx/ezusb2/driver/xp/x86/WdfCoInstaller01009.dll b/iidx/ezusb2/driver/xp/x86/WdfCoInstaller01009.dll new file mode 100755 index 0000000..30e81af Binary files /dev/null and b/iidx/ezusb2/driver/xp/x86/WdfCoInstaller01009.dll differ diff --git a/iidx/ezusb2/driver/xp/x86/cyusb3.cat b/iidx/ezusb2/driver/xp/x86/cyusb3.cat new file mode 100755 index 0000000..a8076b2 Binary files /dev/null and b/iidx/ezusb2/driver/xp/x86/cyusb3.cat differ diff --git a/iidx/ezusb2/driver/xp/x86/cyusb3.inf b/iidx/ezusb2/driver/xp/x86/cyusb3.inf new file mode 100755 index 0000000..9f881e1 --- /dev/null +++ b/iidx/ezusb2/driver/xp/x86/cyusb3.inf @@ -0,0 +1,306 @@ +; Installation INF for the Cypress Generic USB Driver for Windows XP +; Processor support for x86 based platforms. +; +; (c) Copyright 2012, 2013 Cypress Semiconductor Corporation +; + +[Version] +Signature="$WINDOWS NT$" +Class=USB +ClassGUID={36FC9E60-C465-11CF-8056-444553540000} +provider=%CYUSB3_Provider% +CatalogFile=CYUSB3.cat +DriverVer=08/21/2014,1.2.3.10 + +[SourceDisksNames] +1=%CYUSB3_Install%,,, + +[SourceDisksFiles] +CYUSB3.sys = 1 + +[DestinationDirs] +CYUSB3.Files.Ext = 10,System32\Drivers + +[ControlFlags] +ExcludeFromSelect = * + +[Manufacturer] +%CYUSB3_Provider%=Device,NT,NTx86,NTamd64 + +;for all platforms +[Device.NT] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x86 platforms +[Device.NTx86] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +;for x64 platforms +[Device.NTamd64] +;%VID_XXXX&PID_XXXX.DeviceDesc%=CyUsb3, USB\VID_XXXX&PID_XXXX +%VID_04B4&PID_00F0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F0 +%VID_04B4&PID_00F1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F1 +%VID_04B4&PID_00F3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00F3 +%VID_04B4&PID_4720.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4720 +%VID_04B4&PID_00B0.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00B0 +%VID_04B4&PID_00BC.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00BC +%VID_04B4&PID_FFF1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF1 +%VID_04B4&PID_FFF2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF2 +%VID_04B4&PID_FFF3.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_FFF3 +%VID_04B4&PID_0053.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0053 + +%VID_04B4&PID_0082.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0082 +%VID_04B4&PID_0095.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0095 +%VID_04B4&PID_1004.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1004 +%VID_04B4&PID_8613.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_8613 +%VID_04B4&PID_1003.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_1003 +%VID_04B4&PID_6823.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6823 +%VID_04B4&PID_4617.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4617 +%VID_04B4&PID_4611.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_4611 +%VID_04B4&PID_6830.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6830 +%VID_04B4&PID_00A1.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A1 +%VID_04B4&PID_00A2.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00A2 + +%VID_04B4&PID_6473.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_6473 + +%VID_04B4&PID_00FA.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_00FA +%VID_04B4&PID_0002&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0002&MI_02 +%VID_04B4&PID_0004&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_00 +%VID_04B4&PID_0004&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0004&MI_01 +%VID_04B4&PID_0003&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0003&MI_02 +%VID_04B4&PID_0006&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_00 +%VID_04B4&PID_0006&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0006&MI_01 +%VID_04B4&PID_0005&MI_04.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0005&MI_04 +%VID_04B4&PID_0007&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_02 +%VID_04B4&PID_0007&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0007&MI_03 +%VID_04B4&PID_0009&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_00 +%VID_04B4&PID_0009&MI_03.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_0009&MI_03 +%VID_04B4&PID_000A&MI_00.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_00 +%VID_04B4&PID_000A&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_01 +%VID_04B4&PID_000A&MI_02.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000A&MI_02 +%VID_04B4&PID_000B&MI_01.DeviceDesc%=CyUsb3, USB\VID_04B4&PID_000B&MI_01 + +[CYUSB3.NT] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NT.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NT.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.NTx86] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTx86.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTx86.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + +[CYUSB3.NTamd64] +CopyFiles=CYUSB3.Files.Ext +AddReg=CyUsb3.AddReg + +[CYUSB3.NTamd64.HW] +AddReg=CYUSB3.AddReg.Guid + +[CYUSB3.NTamd64.Services] +Addservice = CYUSB3,2,CYUSB3.AddService + + +[CYUSB3.AddReg] +; Deprecating - do not use in new apps to identify a CYUSB3 driver +HKR,,DevLoader,,*ntkern +HKR,,NTMPDriver,,CYUSB3.sys +; You may optionally include a check for DriverBase in your application to check for a CYUSB3 driver +HKR,,DriverBase,,CYUSB3.sys +HKR,"Parameters","MaximumTransferSize",0x10001,4096 +HKR,"Parameters","DebugLevel",0x10001,2 +HKR,,FriendlyName,,%CYUSB3_Description% + +[CYUSB3.AddService] +DisplayName = %CYUSB3_Description% +ServiceType = 1 ; SERVICE_KERNEL_DRIVER +StartType = 3 ; SERVICE_DEMAND_START +ErrorControl = 1 ; SERVICE_ERROR_NORMAL +ServiceBinary = %10%\System32\Drivers\CYUSB3.sys +AddReg = CYUSB3.AddReg +LoadOrderGroup = Base + +[CYUSB3.Files.Ext] +CYUSB3.sys + +[CYUSB3.AddReg.Guid] +HKR,,DriverGUID,,%CYUSB3.GUID% +;HKR,,DriverPowerPolicySetup,,%ENABLE_DRIVER_POWER_POLICY% + +;-------------- WDF Coinstaller installation +[SourceDisksFiles] +WdfCoInstaller01009.dll=1 ; make sure the number matches with SourceDisksNames + +[DestinationDirs] +CoInstaller_CopyFiles = 11 + +[CYUSB3.NTamd64.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CYUSB3.NTx86.CoInstallers] +AddReg=CoInstaller_AddReg +CopyFiles=CoInstaller_CopyFiles + +[CoInstaller_CopyFiles] +WdfCoInstaller01009.dll + +[CoInstaller_AddReg] +HKR,,CoInstallers32,0x00010000, "WdfCoInstaller01009.dll,WdfCoInstaller" + +[CYUSB3.NTamd64.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3.NTx86.Wdf] +KmdfService = CYUSB3, CYUSB3_wdfsect + +[CYUSB3_wdfsect] +KmdfLibraryVersion = 1.9 + + +[Strings] +CYUSB3_Provider = "Cypress" +CYUSB3_Company = "Cypress Semiconductor Corporation" +CYUSB3_Description = "Cypress Generic USB3.0 Driver" +CYUSB3_DisplayName = "Cypress USB3.0 Generic" +CYUSB3_Install = "Cypress CYUSB3.0 Driver Installation Disk" +VID_XXXX&PID_XXXX.DeviceDesc="Cypress USB3.0 Generic Driver" +VID_04B4&PID_00F0.DeviceDesc="Cypress FX3 USB BulkloopExample Device" +VID_04B4&PID_00F1.DeviceDesc="Cypress FX3 USB StreamerExample Device" +VID_04B4&PID_00F3.DeviceDesc="Cypress FX3 USB BootLoader Device" +VID_04B4&PID_4720.DeviceDesc="Cypress FX3 USB BootProgrammer Device" +VID_04B4&PID_00B0.DeviceDesc="Cypress Bay USB Boot Device" +VID_04B4&PID_00BC.DeviceDesc="Cypress Benicia USB Boot Device" +VID_04B4&PID_FFF1.DeviceDesc="Cypress FX3 Workshop Lab1_UsbEnumeration" +VID_04B4&PID_FFF2.DeviceDesc="Cypress FX3 Example device 1" +VID_04B4&PID_FFF3.DeviceDesc="Cypress FX3 Example device 2" +VID_04B4&PID_0053.DeviceDesc="Cypress SD3 USB Boot Device" + +VID_04B4&PID_0082.DeviceDesc="Cypress FX2LP Development board" +VID_04B4&PID_0095.DeviceDesc="Cypress FX2LP USB-JTAG debug probe" +VID_04B4&PID_1004.DeviceDesc="Cypress FX2LP Sample Device" +VID_04B4&PID_8613.DeviceDesc="Cypress FX2LP No EEPROM Device" +VID_04B4&PID_1003.DeviceDesc="Cypress FX2LP StreamerExample Device" +VID_04B4&PID_6823.DeviceDesc="Cypress EZ-USB NX2LP-Flex BootLoader Device" +VID_04B4&PID_4617.DeviceDesc="Cypress EZ-USB NX2LP-Flex Unprogrammed NAND" +VID_04B4&PID_4611.DeviceDesc="Cypress FX2 USB Storage Adapter" +VID_04B4&PID_6830.DeviceDesc="Cypress AT2 USB Storage Adapter" +VID_04B4&PID_00A1.DeviceDesc="Cypress Antioch USB Boot Device" +VID_04B4&PID_00A2.DeviceDesc="Cypress Astoria No EEPROM Device" + +VID_04B4&PID_6473.DeviceDesc="Cypress EZ-USB FX1 No EEPROM Device" + +VID_04B4&PID_00FA.DeviceDesc="USB-Serial MFG mode" +VID_04B4&PID_0002&MI_02.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0004&MI_00.DeviceDesc="USB-Serial (Single Channel) Vendor 1" +VID_04B4&PID_0004&MI_01.DeviceDesc="USB-Serial (Single Channel) Vendor MFG" +VID_04B4&PID_0003&MI_02.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0006&MI_00.DeviceDesc="USB-UART LP Vendor 1" +VID_04B4&PID_0006&MI_01.DeviceDesc="USB-UART LP Vendor MFG" +VID_04B4&PID_0005&MI_04.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0007&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0007&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_0009&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_0009&MI_03.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000A&MI_00.DeviceDesc="USB-Serial (Dual Channel) Vendor 1" +VID_04B4&PID_000A&MI_01.DeviceDesc="USB-Serial (Dual Channel) Vendor 2" +VID_04B4&PID_000A&MI_02.DeviceDesc="USB-Serial (Dual Channel) Vendor MFG" +VID_04B4&PID_000B&MI_01.DeviceDesc="Cypress USB-I2C PTP Bridge MFG" + + +CYUSB3.GUID="{AE18AA60-7F6A-11d4-97DD-00010229B959}" +;ENABLE_DRIVER_POWER_POLICY="1" +CYUSB3_Unused = "." diff --git a/iidx/ezusb2/driver/xp/x86/cyusb3.sys b/iidx/ezusb2/driver/xp/x86/cyusb3.sys new file mode 100755 index 0000000..1a473cf Binary files /dev/null and b/iidx/ezusb2/driver/xp/x86/cyusb3.sys differ diff --git a/iidx/ezusb2/firmware/README.md b/iidx/ezusb2/firmware/README.md new file mode 100644 index 0000000..1cb1ef1 --- /dev/null +++ b/iidx/ezusb2/firmware/README.md @@ -0,0 +1,4 @@ +# Firmware binary Ezusb FX2, aka IO2 +The firmware binary blob. No FPGA binary because the IO2 does not use any FPGA +like the C02 IO. Requires appropriate tools from BT5 to load them to the +hardware. \ No newline at end of file diff --git a/iidx/ezusb2/firmware/ezusb2.bin b/iidx/ezusb2/firmware/ezusb2.bin new file mode 100755 index 0000000..8159bb7 Binary files /dev/null and b/iidx/ezusb2/firmware/ezusb2.bin differ diff --git a/iidx/misc/CLVSD.ax b/iidx/misc/CLVSD.ax new file mode 100644 index 0000000..1412b71 Binary files /dev/null and b/iidx/misc/CLVSD.ax differ diff --git a/iidx/misc/README.md b/iidx/misc/README.md new file mode 100644 index 0000000..9aedf1b --- /dev/null +++ b/iidx/misc/README.md @@ -0,0 +1,11 @@ +# Misc stuff + +* CLVSD.ax: Video codec required to play background videos from IIDX 12 +onwards. +Install: Start -> Run -> regsvr32 clvsd.ax +* libacio_20_slot.dll: libacio implementation from IIDX 20 which supports +slotted readers. Thank you Konami for leaving this on the drive. +* RtEffect_stub.dll: Required for IIDX 10 to 13 when running the games on +hardware that does not have an analog version of a Realtek integrated sound +chip. Replace the existing RtEffect.dll in the game folder with this one. +Otherwise, the game won't boot (instantaneous crash). diff --git a/iidx/misc/RtEffect_stub.dll b/iidx/misc/RtEffect_stub.dll new file mode 100644 index 0000000..6bbba50 Binary files /dev/null and b/iidx/misc/RtEffect_stub.dll differ diff --git a/iidx/misc/libacio_20_slot.dll b/iidx/misc/libacio_20_slot.dll new file mode 100755 index 0000000..31d2f26 Binary files /dev/null and b/iidx/misc/libacio_20_slot.dll differ diff --git a/misc/README.md b/misc/README.md new file mode 100644 index 0000000..e1c5222 --- /dev/null +++ b/misc/README.md @@ -0,0 +1,2 @@ +# Misc bemani game supplements +* [d3d8to9](d3d8to9/README.md): DirectX 8 to 9 wrapper library to solve issues with d3d8 based (bemani) games. diff --git a/misc/d3d8to9/README.md b/misc/d3d8to9/README.md new file mode 100644 index 0000000..30454f5 --- /dev/null +++ b/misc/d3d8to9/README.md @@ -0,0 +1,21 @@ +# DirectX 8 to 9 wrapper +Source: https://github.com/crosire/d3d8to9 + +Includes: +* d3d8.dll (compiled binary) +* Source code for compiled binary + +# Why? +Some Konami games are quite old and don't run well on modern versions of Windows (7 and newer): +* Framerate is not locked to v-sync though v-sync is turned on +* Random stuttering and slow-downs + +Games with these issues experienced thus far: +* IIDX 9 to 13: Even with bemanitools various settings in place, these games would not run flawlessly on Windows 10: Random stuttering in menus and during songs causing them to drift off-sync though the framerate was supposed to be stable. + +# Install +* Requires the D3D9 SDK: https://www.microsoft.com/en-us/download/confirmation.aspx?id=8109 +* Put the d3d8.dll next to your game executable. + +For example: +* IIDX: Put d3d8.dll next to bm2dx.exe. diff --git a/misc/d3d8to9/d3d8.dll b/misc/d3d8to9/d3d8.dll new file mode 100644 index 0000000..4c46fb1 Binary files /dev/null and b/misc/d3d8to9/d3d8.dll differ diff --git a/misc/d3d8to9/d3d8to9-1.9.2.zip b/misc/d3d8to9/d3d8to9-1.9.2.zip new file mode 100644 index 0000000..ddcb123 Binary files /dev/null and b/misc/d3d8to9/d3d8to9-1.9.2.zip differ