|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: /* ! 26: File: KeyboardModuleHeader.c ! 27: ! 28: Contains: Keyboard Module Header file ! 29: ! 30: Version: xxx put version here xxx ! 31: ! 32: Copyright: � 1997-1998 by Apple Computer, Inc., all rights reserved. ! 33: ! 34: File Ownership: ! 35: ! 36: DRI: Craig Keithley ! 37: ! 38: Other Contact: xxx put other contact here xxx ! 39: ! 40: Technology: xxx put technology here xxx ! 41: ! 42: Writers: ! 43: ! 44: (TC) Tom Clark ! 45: (CJK) Craig Keithley ! 46: ! 47: Change History (most recent first): ! 48: ! 49: <USB12> 6/17/98 CJK add pipe abort in finalize ! 50: <USB11> 6/11/98 CJK change display of status to display of interfaceRef (in finalize ! 51: routine) ! 52: <USB10> 6/11/98 CJK investigate interface driver load time call of routines ! 53: <USB9> 6/8/98 CJK deallocation of full configuration structure ! 54: <USB8> 5/20/98 CJK change target name from USBKeyboardModule to ! 55: USBHIDKeyboardModule ! 56: <USB7> 4/27/98 TC Implement a USBDriverLoadingOption to enforce protocol matching. ! 57: <USB6> 4/9/98 CJK remove include of USBDeviceDefines.h ! 58: <5> 3/17/98 CJK fix pragma unuseds (MW needs parens around the variable name). ! 59: <4> 3/5/98 CJK use version info defined in KeyboardModuleVersion.h ! 60: <3> 3/2/98 CJK remove include of KBDHIDEmulation.h ! 61: <2> 2/10/98 CJK Correct change history (to reflect the keyboard module changes) ! 62: <1> 2/10/98 CJK First time check in. Cloned from Mouse HID Module. ! 63: */ ! 64: ! 65: //#include <Types.h> ! 66: //#include <Devices.h> ! 67: #include "../driverservices.h" ! 68: #include "../USB.h" ! 69: ! 70: #include "KeyboardModule.h" ! 71: #include "KeyboardModuleVersion.h" ! 72: ! 73: static OSStatus KeyboardModuleInitialize (USBDeviceRef device, USBDeviceDescriptorPtr pDesc, UInt32 busPowerAvailable); ! 74: static OSStatus KeyboardModuleFinalize(USBDeviceRef device, USBDeviceDescriptorPtr pDesc); ! 75: static OSStatus KeyboardInterfaceInitialize (UInt32 interfacenum, USBInterfaceDescriptorPtr pInterface, USBDeviceDescriptorPtr pDesc, USBDeviceRef device); ! 76: ! 77: extern usbKeyboardPBStruct myKeyboardPB; ! 78: ! 79: //------------------------------------------------------ ! 80: // ! 81: // This is the driver description structure that the expert looks for first. ! 82: // If it's here, the information within is used to match the driver ! 83: // to the device whose descriptor was passed to the expert. ! 84: // Information in this block is also used by the expert when an ! 85: // entry is created in the Name Registry. ! 86: // ! 87: //------------------------------------------------------ ! 88: USBDriverDescription TheUSBDriverDescription = ! 89: { ! 90: // Signature info ! 91: kTheUSBDriverDescriptionSignature, ! 92: kInitialUSBDriverDescriptor, ! 93: ! 94: // Device Info ! 95: 0, // vendor = not device specific ! 96: 0, // product = not device specific ! 97: 0, // version of product = not device specific ! 98: kUSBKeyboardInterfaceProtocol, // protocol = not device specific ! 99: ! 100: // Interface Info (* I don't think this would always be required...*) ! 101: 0, // Configuration Value ! 102: 0, // Interface Number ! 103: kUSBHIDInterfaceClass, // Interface Class ! 104: kUSBBootInterfaceSubClass, // Interface SubClass ! 105: kUSBKeyboardInterfaceProtocol, // Interface Protocol ! 106: ! 107: ! 108: // Driver Info ! 109: "USBHIDKeyboardModule", // Driver name for Name Registry ! 110: kUSBHIDInterfaceClass, // Device Class (from USBDeviceDefines.h) ! 111: kUSBBootInterfaceSubClass, // Device Subclass ! 112: kKBDHexMajorVers, ! 113: kKBDHexMinorVers, ! 114: kKBDCurrentRelease, ! 115: kKBDReleaseStage, // version of driver ! 116: ! 117: // Driver Loading Info ! 118: kUSBProtocolMustMatch // Flags ! 119: }; ! 120: /*naga ! 121: USBClassDriverPluginDispatchTable TheClassDriverPluginDispatchTable = ! 122: { ! 123: kClassDriverPluginVersion, // Version of this structure ! 124: 0, // Hardware Validation Procedure ! 125: KeyboardModuleInitialize, // Initialization Procedure ! 126: KeyboardInterfaceInitialize, // Interface Initialization Procedure ! 127: KeyboardModuleFinalize, // Finalization Procedure ! 128: 0, // Driver Notification Procedure ! 129: }; ! 130: ! 131: */ ! 132: ! 133: // Initialization function ! 134: // Called upon load by Expert ! 135: static OSStatus KeyboardModuleInitialize (USBDeviceRef device, USBDeviceDescriptorPtr pDesc, UInt32 busPowerAvailable) ! 136: { ! 137: #pragma unused (busPowerAvailable) ! 138: #pragma unused (pDesc) ! 139: USBExpertStatus(device, "USBHIDKeyboardModule: Entered via KeyboardModuleInitialize", device); ! 140: return (OSStatus)noErr; ! 141: } ! 142: ! 143: // Interface Initialization Initialization function ! 144: // Called upon load by Expert ! 145: static OSStatus KeyboardInterfaceInitialize (UInt32 interfacenum, USBInterfaceDescriptorPtr pInterface, USBDeviceDescriptorPtr pDesc, USBDeviceRef device) ! 146: { ! 147: InterfaceEntry(interfacenum, pInterface, pDesc, device); ! 148: return (OSStatus)noErr; ! 149: } ! 150: ! 151: ! 152: ! 153: // Termination function ! 154: // Called by Expert when driver is being shut down ! 155: static OSStatus KeyboardModuleFinalize(USBDeviceRef theDeviceRef, USBDeviceDescriptorPtr pDesc) ! 156: { ! 157: #pragma unused (pDesc) ! 158: ! 159: OSStatus myErr; ! 160: ! 161: USBExpertStatus(theDeviceRef, "USBHIDKeyboardModule: Finalize", theDeviceRef); ! 162: if (myKeyboardPB.pFullConfigDescriptor != nil) ! 163: { ! 164: if (myKeyboardPB.pipeRef) ! 165: { ! 166: USBExpertStatus(theDeviceRef, "USBHIDKeyboardModule: Aborting interrupt pipe", theDeviceRef); ! 167: USBAbortPipeByReference(myKeyboardPB.pipeRef); ! 168: } ! 169: ! 170: myKeyboardPB.pb.usbReference = theDeviceRef; ! 171: myKeyboardPB.pb.pbVersion = kUSBCurrentPBVersion; ! 172: myKeyboardPB.pb.usbFlags = 0; ! 173: myKeyboardPB.pb.usbRefcon = 0; ! 174: myKeyboardPB.pb.usbBuffer = myKeyboardPB.pFullConfigDescriptor; ! 175: myKeyboardPB.pb.usbCompletion = (USBCompletion)-1; ! 176: ! 177: myErr = USBDeallocMem(&myKeyboardPB.pb); ! 178: }; ! 179: return (OSStatus)noErr; ! 180: } ! 181:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.