/****************************************************************************** * * Copyright (C) 2006 Vreelin Engineering, Inc. All Rights Reserved. * (c) Copyright 2007-2013 Xilinx, Inc. All rights reserved. * * This file contains confidential and proprietary information of Xilinx, Inc. * and is protected under U.S. and international copyright and other * intellectual property laws. * * DISCLAIMER * This disclaimer is not a license and does not grant any rights to the * materials distributed herewith. Except as otherwise provided in a valid * license issued to you by Xilinx, and to the maximum extent permitted by * applicable law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND WITH ALL * FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS, * IMPLIED, OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF * MERCHANTABILITY, NON-INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; * and (2) Xilinx shall not be liable (whether in contract or tort, including * negligence, or under any other theory of liability) for any loss or damage * of any kind or nature related to, arising under or in connection with these * materials, including for any direct, or any indirect, special, incidental, * or consequential loss or damage (including loss of data, profits, goodwill, * or any type of loss or damage suffered as a result of any action brought by * a third party) even if such damage or loss was reasonably foreseeable or * Xilinx had been advised of the possibility of the same. * * CRITICAL APPLICATIONS * Xilinx products are not designed or intended to be fail-safe, or for use in * any application requiring fail-safe performance, such as life-support or * safety devices or systems, Class III medical devices, nuclear facilities, * applications related to the deployment of airbags, or any other applications * that could lead to death, personal injury, or severe property or * environmental damage (individually and collectively, "Critical * Applications"). Customer assumes the sole risk and liability of any use of * Xilinx products in Critical Applications, subject only to applicable laws * and regulations governing limitations on product liability. * * THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS PART OF THIS FILE * AT ALL TIMES. * *******************************************************************************/ /******************************************************************************/ /** * @file xusb_keyboard.h * * This file contains the constants, type definitions, variables and function * prototypes used in the USB keyboard example. * * @note None. * *
* MODIFICATION HISTORY: * * Ver Who Date Changes * ----- ---- ------------------------------------------------------------------ * 1.00a hvm 5/31/07 First release * 3.02a hvm 08/16/10 Updated with the little endian support changes. * 4.00a hvm 08/11/11 Updated the Message[] variable data to * handle the address alignment issue. * 4.02a bss 11/01/11 Number of endpoints changed from 0x00 to 0x01 in * FsUsbConfig to support Full Speed (CR 627573). * ******************************************************************************/ #ifndef XUSB_KEYBOARD_H #define XUSB_KEYBOARD_H #ifdef __cplusplus extern "C" { #endif /***************************** Include Files **********************************/ #include "xusb_cp9.h" /************************** Constant Definitions ******************************/ /************************** Variable Definitions ******************************/ /* * Flags used to abort read and write command loops. */ extern u16 MaxControlSize; USB_STD_DEV_DESC DeviceDescriptor __attribute__ ((aligned(4))) = { sizeof(USB_STD_DEV_DESC), /* Descriptor Size 18 bytes */ DEVICE_DESCR, /* This is a device descriptor */ #ifdef __LITTLE_ENDIAN__ 0x0200, /* USB version */ #else 0x02, /* USB version */ #endif 0, /* Vendor Specific */ 00, /* Unused */ 00, /* Unused */ 0x40, /* Ep0 Max Pkt Size 64 bytes */ #ifdef __LITTLE_ENDIAN__ 0x03FD, /* Vendor Id */ 0x0200, /* Product Id */ 0x0100, /* BCD device */ #else 0xFD03, /* Vendor Id */ 0x0002, /* Product Id */ 0x01, /* BCD device */ #endif 01, /* String Index of manufacturer */ 02, /* String Index of product */ 03, /* String Index of serial number */ 01 /* Number of configurations */ }; USB_STD_QUAL_DESC QualifierDescriptor __attribute__ ((aligned(4))) = { sizeof(USB_STD_QUAL_DESC), QUALIFIER_DESCR, 00, 02, 0, 00, 00, 0x40, 01, 0}; FPGA1_CONFIGURATION __attribute__ ((aligned(4))) HsUsbConfig = { { /* * Configuration descriptor. */ sizeof(USB_STD_CFG_DESC),/* Size of config descriptor 9 bytes */ CONFIG_DESCR, /* This is a conifig descriptor */ sizeof(HsUsbConfig), /* Total size of configuration LS */ 0x00, /* Total size of configuration MS */ 0x01, /* No. Of interfaces 1 */ CONFIGURATION_ONE, /* No of configuration values */ 0x00, /* Configuration string */ 0xC0, /* Self Powered */ 0x01 /* Uses 2mA from the USB bus */ } , { /* * FPGA1 Class interface. */ sizeof(USB_STD_IF_DESC), /* Interface Descriptor size 9 bytes */ INTERFACE_DESCR, /* This is an interface descriptor */ 0x00, /* Interface number 0 */ 0x00, /* Alternate set 0 */ 0x01, /* Number of end points 1 */ USB_CLASS_HID, /* Vendor specific */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol */ 0x00 /* Interface unused */ }, { /* * HID Descriptor */ sizeof(USB_STD_HID_DESC), /* bLength */ 0x21, /* bDescriptorType = HID */ 0x10, /* bcdHID L */ 0x01, /* bcdHID H Rev 1.1 */ 0x00, /* bCountryCode (none) */ 0x01, /* bNumDescriptors (one report descriptor) */ 0x22, /* bDescriptorType (report)*/ 0x2b, /* wDescriptorLength (L/H) (report descriptor size is 43 bytes) */ 0x00 }, { /* * End_point 1 RX descriptor from device to host. */ sizeof(USB_STD_EP_DESC), /* End point descriptor size */ ENDPOINT_DESCR, /* This is an end point descriptor */ 0x81, /* End point one */ EP_INTERRUPT, /* End point type */ 0x40, /* Maximum packet size 64 bytes LS */ 0x00, /* Maximum packetsize MS */ 0x10 /* Nak rate */ } }; FPGA1_CONFIGURATION __attribute__ ((aligned(4))) FsUsbConfig = { { /* * Configuration descriptor. */ sizeof(USB_STD_CFG_DESC), /* Size of config descriptor 9 bytes */ CONFIG_DESCR, /* This is a conifig descriptor */ sizeof(FsUsbConfig), /* Total size of configuration LS */ 0x00, /* Total size of configuration MS */ 0x01, /* No. Of interfaces 1 */ CONFIGURATION_ONE, /* No of configuration values */ 0x00, /* Configuration string */ 0xC0, /* Self Powered */ 0x01 /* Uses 2mA from the USB bus */ }, { /* * FPGA1 Class interface. */ sizeof(USB_STD_IF_DESC), /* Interface Descriptor size 9 bytes */ INTERFACE_DESCR, /* This is an interface descriptor */ 0x00, /* Interface number 0 */ 0x00, /* Alternate set 0 */ 0x01, /* Number of end points 1 */ USB_CLASS_HID, /* Vendor specific */ 0x00, /* Interface sub class */ 0x00, /* Interface protocol */ 0x00 /* Interface unused */ }, { /* * HID Descriptor */ sizeof(USB_STD_HID_DESC), /* bLength */ 0x21, /* bDescriptorType = HID */ 0x10, /* bcdHID L */ 0x01, /* bcdHID H Rev 1.1 */ 0x00, /* bCountryCode (none) */ 0x01, /* bNumDescriptors (one report descriptor) */ 0x22, /* bDescriptorType (report)*/ 0x2b, /* wDescriptorLength (L/H) (report descriptor size is 43 bytes) */ 0x00 }, { /* * End_point 1 descriptor from device to host. */ sizeof(USB_STD_EP_DESC), /* End point descriptor size */ ENDPOINT_DESCR, /* This is an end point descriptor */ 0x81, /* End point one */ EP_INTERRUPT, /* End point type */ 0x40, /* Maximum packet size 64 bytes LS */ 0x00, /* Maximum packetsize MS */ 0x10 /* Nak rate */ } }; USB_STD_STRING_DESC LangId __attribute__ ((aligned(4))) = { /* * Language ID codes. */ 4, STRING_DESCR, { 0x0904} }; USB_STD_STRING_MAN_DESC Manufacturer __attribute__ ((aligned(4))) = { /* * Manufacturer String. */ sizeof(USB_STD_STRING_MAN_DESC), STRING_DESCR, { 'X', 0, 'I', 0, 'L', 0, 'I', 0, 'N', 0, 'X', 0, ' ', 0} }; USB_STD_STRING_PS_DESC ProductString __attribute__ ((aligned(4))) = { /* * Product ID String. */ sizeof(USB_STD_STRING_PS_DESC), STRING_DESCR, { 'F', 0, 'P', 0, 'G', 0, 'A', 0, '2', 0} }; USB_STD_STRING_SN_DESC SerialNumber __attribute__ ((aligned(4))) = { /* * Product ID String. */ sizeof(USB_STD_STRING_SN_DESC), STRING_DESCR, { '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '0', 0, '1', 0, '7', 0, '1', 0, '5', 0, '0', 0, '4', 0, '2', 0, '6', 0, '2', 0, '0', 0, '0', 0, '5', 0, '7', 0, '6', 0} }; USB_STD_HID_DESC HidDescriptor __attribute__ ((aligned(4))) = { sizeof(USB_STD_HID_DESC), /* bLength */ 0x21, /* bDescriptorType = HID */ 0x10, /* bcdHID L */ 0x01, /* bcdHID H Rev 1.1 */ 0x00, /* bCountryCode (none) */ 0x01, /* bNumDescriptors (one report descriptor) */ 0x22, /* bDescriptorType (report)*/ 0x2b, /* wDescriptorLength (L/H) (report descriptor size is 43 bytes) */ 0x00 }; /*Xilinx specific message*/ unsigned char Message[] __attribute__ ((aligned(4)))= { 0x00,0x00,0x28,0x00, // (cr) 0x02,0x00,0x1B,0x00, // X 0x02,0x00,0x0C,0x00, // I 0x02,0x00,0x0F,0x00, // L 0x02,0x00,0x0C,0x00, // I 0x02,0x00,0x11,0x00, // N 0x02,0x00,0x1B,0x00, // X 0x00,0x00,0x2C,0x00, // (sp) 0x02,0x00,0x18,0x00, // U 0x02,0x00,0x16,0x00, // S 0x02,0x00,0x05,0x00, // B 0x00,0x00,0x2C,0x00, // (sp) 0x02,0x00,0x0E,0x00, // K 0x02,0x00,0x08,0x00, // E 0x02,0x00,0x1C,0x00, // Y 0x02,0x00,0x05,0x00, // B 0x02,0x00,0x12,0x00, // O 0x02,0x00,0x04,0x00, // A 0x02,0x00,0x15,0x00, // R 0x02,0x00,0x07,0x00, // D 0x00,0x00,0x2C,0x00, // (sp) 0x02,0x00,0x07,0x00, // D 0x02,0x00,0x08,0x00, // E 0x02,0x00,0x10,0x00, // M 0x02,0x00,0x12,0x00, // O 0x00,0x00,0x28,0x00}; //(cr) /************************** Function Prototypes *******************************/ void InitUsbInterface(XUsb * InstancePtr); void UsbIfIntrHandler(void *CallBackRef, u32 IntrStatus); void Ep0IntrHandler(void *CallBackRef, u8 EpNum, u32 IntrStatus); void Ep1IntrHandler(void *CallBackRef, u8 EpNum, u32 IntrStatus); #ifdef __cplusplus } #endif #endif /* XUSB_KEYBOARD_H */