Cypress Input Devices Driver



Windows provides Winusb.sys that can be loaded as a function driver for a custom device and a function of a composite device. USB generic parent driver for composite devices–Usbccgp. Parent driver for USB devices with multiple functions. Usbccgp creates physical device objects (PDOs) for each of those functions. Those individual PDOs are managed by their respective USB function drivers, which could be. The package provides the installation files for Microsoft USB Input Device Driver version 10.0.4. If the driver is already installed on your system, updating (overwrite-installing) may fix various issues, add new functions, or just upgrade to the available version.

-->

Universal Serial Bus (USB) provides an expandable, hot-pluggable Plug and Play serial interface that ensures a standard, low-cost connection for peripheral devices such as keyboards, mice, joysticks, printers, scanners, storage devices, modems, and video conferencing cameras. Migration to USB is recommended for all peripheral devices that use legacy ports such as PS/2, serial, and parallel ports.

The USB-IF is a Special Interest Groups (SIGs) that maintains the Official USB Specification, test specifications and tools. Esi products usb devices driver.

Windows operating systems include native support for USB host controllers, hubs, and devices and systems that comply with the official USB specification. Windows also provides programming interfaces that you can use to develop device drivers and applications that communicate with a USB device.

Cypress Input Device Driver Windows 10

USB in WindowsWindows 10: What's new for USB

Overview of new features and improvements in USB in Windows 10.

USB FAQ

Frequently asked questions from driver developers about the USB stack and features that are supported in USB.

Microsoft OS Descriptors for USB Devices

Windows defines MS OS descriptors that allows better enumeration when connected to system running Windows operating system

Microsoft-provided USB driversUSB device-side drivers in Windows

A set of drivers for handling common function logic for USB devices.

USB host-side drivers in Windows

Microsoft provides a core stack of drivers that interoperate with devices that are connected to EHCI and xHCI controllers.

USB-IF device class drivers

Windows provides in-box device class drivers for many USB-IF approved device classes, audio, mass storage, and so on.

USB generic function driver–WinUSB

Windows provides Winusb.sys that can be loaded as a function driver for a custom device and a function of a composite device.

USB generic parent driver for composite devices–Usbccgp

Parent driver for USB devices with multiple functions. Usbccgp creates physical device objects (PDOs) for each of those functions. Those individual PDOs are managed by their respective USB function drivers, which could be the Winusb.sys driver or a USB device class driver.

WDF extension for developing USB drivers
  • USB connector manager class extension (UcmCx) reference
  • USB host controller (UCX) reference
  • USB function class extension (UFX) reference
Testing USB devices with Windows

Get information about the tools that you can use to test your USB hardware or software, capture traces of operations and other system events, and observe how the USB driver stack responds to a request sent by a client driver or an application.

Read an overview of tests in the Hardware Certification Kit that enable hardware vendors and device manufacturers to prepare their USB devices and host controllers for Windows Hardware Certification submission.

Other Resources for USB

Official USB Specification

Provides complete technical details for the USB protocol.

Microsoft Windows USB Core Team Blog

Check out posts written by the Microsoft USB Team. The blog focuses on the Windows USB driver stack that works with various USB Host controllers and USB hubs found in Windows PC. A useful resource for USB client driver developers and USB hardware designers understand the driver stack implementation, resolve common issues, and explain how to use tools for gathering traces and log files.

OSR Online Lists - ntdev

Discussion list managed by OSR Online for kernel-mode driver developers.

Windows Dev-Center for Hardware Development

Miscellaneous resources based on frequently asked questions from developers who are new to developing USB devices and drivers that work with Windows operating systems.

USB-related videos

UWP apps for USB devicesUnderstanding USB 3.0 in Windows 8Building great USB 3.0 devicesUSB Debugging Innovations in Windows 8 (Part I, II, & III)

USB hardware for learning

MUTT devices

MUTT and SuperMUTT devices and the accompanying software package are integrated into the HCK suite of USB tests. They provide automated testing that can be used during the development cycle of USB controllers, devices and systems, especially stress testing.

OSR USB FX2 Learning Kit

If you are new to USB driver development. The kit is the most suitable to study USB samples included in this documentation set. You can get the learning kit from OSR Online Store.

Write a USB client driver (KMDF, UMDF)

Introduces you to USB driver development. Provides information about choosing the most appropriate model for providing a USB driver for your device. This section also includes tutorials about writing your first user-mode and kernel-mode USB drivers by using the USB templates included with Microsoft Visual Studio.

Write a USB host controller driver

If you are developing an xHCI host controller that is not compliant with the specification or developing a custom non-xHCI hardware (such as a virtual host controller), you can write a host controller driver that communicates with UCX. For example, consider a wireless dock that supports USB devices. The PC communicates with USB devices through the wireless dock by using USB over TCP as a transport.

  • USB host controller (UCX) reference
Write a function controller driver for a USB device

You can develop a controller driver that handles all USB data transfers and commands sent by the host to the device. This driver communicates with the Microsoft-provided USB function controller extension (UFX).

Evercom network driver. USB function class extension (UFX) reference

Write a USB Type-C connector driver

Windows 10 introduces support for the new USB connector: USB Type-C. You can write a driver for the connector that communicates with the Microsoft-provided class extension module: UcmCx to handle scenarios related to Type-C connectors such as, which ports support Type-C, which ports support power delivery.

USB connector manager class extension (UcmCx) reference

Write a USB dual-role controller driver

USB Dual Role controllers are now supported in Windows 10. Windows includes in-box client drivers for ChipIdea and Synopsys controllers. For other controllers, Microsoft provides a set of programming interfaces that allow the dual-role class extension (UrsCx) and its client driver to communicate with each other to handle the role-switching capability of a dual-role controller.

For more information about this feature, see:

USB dual-role controller driver programming reference

Write a USB driver for emulated devices

Windows 10 introduces support for emulated devices. Now you can develop an emulated Universal Serial Bus (USB) host controller driver and a connected virtual USB device. Both components are combined into a single KMDF driver that communicates with the Microsoft-provided USB device emulation class extension (UdeCx).

Emulated USB host controller driver programming reference

Write a UWP app

Provides step-by-step instructions about implementing USB features in a UWP app. To write such an app for a USB device you need Visual Studio and Microsoft Windows Software Development Kit (SDK) .

Write a Windows desktop app

Describes how an application can call WinUSB Functions to communicate with a USB device.

WinUSB functions

Common programming scenarios

List of common tasks that a driver or an app performs in order to communicate with a USB device. Get quick info about the programming interfaces you need for each task.

USB samples

Development tools

Download kits and tools for Windows

Cypress Input Devices Driver Touchpad

General Description

The GPIO driver provides an API to configure and access device Input/Output pins.

The functions and other declarations used in this driver are in cy_gpio.h. You can include cy_pdl.h to get access to all functions and declarations in the PDL.

IO pins include all general purpose types such as GPIO, SIO, HSIO, AUXIO, and their variants.

Initialization can be performed either at the port level or by configuring the individual pins. For efficient use of code space, port configuration should be used in the field. Refer to the product device header files for the list of supported ports and pins.

Cypress input devices driver touchpad
  • Single pin configuration is performed by using Cy_GPIO_Pin_FastInit (provide specific values) or Cy_GPIO_Pin_Init (provide a filled cy_stc_gpio_pin_config_t structure).
  • An entire port can be configured using Cy_GPIO_Port_Init. Provide a filled cy_stc_gpio_prt_config_t structure. The values in the structure are bitfields representing the desired value for each pin in the port.
  • Pin configuration and management is based on the port address and pin number. Cy_GPIO_PortToAddr function can optionally be used to calculate the port address from the port number at run-time.

Once the pin/port initialization is complete, each pin can be accessed by specifying the port (GPIO_PRT_Type) and the pin (0-7) in the provided API functions.

  1. Pin multiplexing is controlled through the High-Speed IO Matrix (HSIOM) selection. This allows the pin to connect to signal sources/sinks throughout the device, as defined by the pin HSIOM selection options (en_hsiom_sel_t).
  2. All pins are initialized to High-Z drive mode with HSIOM connected to CPU (SW control digital pin only) at Power-On-Reset(POR).
  3. Some API functions perform read-modify-write operations on shared port registers. These functions are not thread safe and care must be taken when called by the application.
  4. Digital input buffer provides a high-impedance buffer for the external digital input. The input buffer is connected to the HSIOM for routing to the CPU port registers and selected peripheral. Enabling the input buffer provides possibility to read the pin state via the CPU. If pin is connected to an analog signal, the input buffer should be disabled to avoid crowbar currents. For more information refer to device TRM and the device datasheet.

Multiple pins on a port can be updated using direct port register writes with an appropriate port mask. An example is shown below, highlighting the different ways of configuring Port 1 pins using:

  • Port output data register
  • Port output data set register
  • Port output data clear register
uint8_t value;
/* Set the port address */
/* Set the drive mode to STRONG for pins P1[0], P1[2] and P1[3] (other pins in this port are HIGHZ) */
CY_SET_REG32(&portAddr->CFG, CY_GPIO_DM_STRONG_IN_OFF << GPIO_PRT_CFG_DRIVE_MODE0_Pos |
CY_GPIO_DM_STRONG_IN_OFF << GPIO_PRT_CFG_DRIVE_MODE2_Pos |
CY_GPIO_DM_STRONG_IN_OFF << GPIO_PRT_CFG_DRIVE_MODE3_Pos );
/* Set the pins P1[0], P1[2] and P1[3] to high and other pins in this port to low */
CY_SET_REG32(&portAddr->OUT, GPIO_PRT_OUT_OUT0_Msk |

Cypress Input Devices Driver Updater

GPIO_PRT_OUT_OUT3_Msk);

Cypress Input Devices Driver Device

/* Set the pins P1[2] and P1[3] to low (other pins in this port are unchanged) */
CY_SET_REG32(&portAddr->OUT_CLR, GPIO_PRT_OUT_CLR_OUT2_Msk |
/* Set the pin P1[3] to high again (other pins in this port are unchanged) */
CY_SET_REG32(&portAddr->OUT_SET, GPIO_PRT_OUT_SET_OUT3_Msk);
/* Read the port data (value should be 0b00001001) */
/* Set pin P1[3] to low (other pins are not impacted) */
CY_SET_REG32(&portAddr->OUT, _CLR_SET_FLD32U(portAddr->OUT, GPIO_PRT_OUT_OUT3, 0u));
/* Set pin P1[2] to high (other pins are not impacted) */
CY_SET_REG32(&portAddr->OUT, _CLR_SET_FLD32U(portAddr->OUT, GPIO_PRT_OUT_OUT2, 1u));

Refer to the technical reference manual (TRM) and the device datasheet.

The GPIO driver has the following specific deviations:

Cypress Input Devices Drivers

MISRA Rule Rule Class (Required/Advisory) Rule Description Description of Deviation(s)
11.4 A A cast should not be performed between a pointer to object type and a different pointer to object type. This code is safe because the elements of both GPIO_PRT_V1_Type and GPIO_PRT_V2_Type types have identical alignment.
16.7 A A pointer parameter in a function prototype should be declared as pointer to const if the pointer is not used to modify the addressed object. The objects pointed to by the base addresses of the GPIO port are not always modified. While a const qualifier can be used in select scenarios, it brings little benefit in adding this to the affected functions.
VersionChangesReason for Change
1.20.1 Minor documentation updates. Documentation enhancement.
1.20 Flattened the organization of the driver source code into the single source directory and the single include directory. Driver library directory-structure simplification.
Added the functions for configuring the AMux bus splitter switch cells:Added a new functionality related to AMux bus.
Added register access layer. Use register access macros instead of direct register access using dereferenced pointers. Makes register access device-independent, so that the PDL does not need to be recompiled for each supported part number.
1.10.1

Updated description for the functions: Cy_GPIO_GetInterruptStatus, Cy_GPIO_GetInterruptMask, Cy_GPIO_GetInterruptStatusMasked.

Minor documentation edits.

Documentation update and clarification
1.10 Added input parameter validation to the API functions
1.0 Initial version

Cypress Input Devices Driver

API Reference

Macros
Functions
Data Structures
Enumerated Types