/* * * @APPLE_LICENSE_HEADER_START@ * * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in * compliance with the License. Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this * file. * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. * * @APPLE_LICENSE_HEADER_END@ */ #ifndef _IOKIT_IOHIDOutputTransactionClass_H #define _IOKIT_IOHIDOutputTransactionClass_H #include "IOHIDDeviceClass.h" class IOHIDOutputTransactionClass : public IOHIDIUnknown { private: // friends with our parent device class friend class IOHIDDeviceClass; // Disable copy constructors IOHIDOutputTransactionClass(IOHIDOutputTransactionClass &src); void operator =(IOHIDOutputTransactionClass &src); protected: IOHIDOutputTransactionClass(); virtual ~IOHIDOutputTransactionClass(); static IOHIDOutputTransactionInterface sHIDOutputTransactionInterfaceV1; struct InterfaceMap fHIDOutputTransaction; mach_port_t fAsyncPort; CFRunLoopSourceRef fCFSource; // if created, how we were created bool fIsCreated; // owming device IOHIDDeviceClass * fOwningDevice; // Related transaction call back info IOHIDCallbackFunction fEventCallback; void * fEventTarget; void * fEventRefcon; // The transaction linked list CFMutableDictionaryRef fElementDictionaryRef; // CFMachPortCallBack routine static void transactionEventSourceCallback(CFMachPortRef *cfPort, mach_msg_header_t *msg, CFIndex size, void *info); public: // set owner void setOwningDevice (IOHIDDeviceClass * owningDevice) { fOwningDevice = owningDevice; }; // get interface map (for queryInterface) void * getInterfaceMap (void) { return &fHIDOutputTransaction; }; // IOCFPlugin stuff virtual HRESULT queryInterface(REFIID iid, void **ppv); virtual IOReturn createAsyncEventSource(CFRunLoopSourceRef *source); virtual CFRunLoopSourceRef getAsyncEventSource(); virtual IOReturn createAsyncPort(mach_port_t *port); virtual mach_port_t getAsyncPort(); /* Basic IOHIDOutputTransaction interface */ /* depth is the maximum number of elements in the queue before */ /* the oldest elements in the queue begin to be lost */ virtual IOReturn create (); virtual IOReturn dispose (); /* Any number of hid elements can feed the same transaction */ virtual IOReturn addElement (IOHIDElementCookie elementCookie); virtual IOReturn removeElement (IOHIDElementCookie elementCookie); virtual Boolean hasElement (IOHIDElementCookie elementCookie); virtual IOReturn setElementDefault( IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* get the default value for that element */ virtual IOReturn getElementDefault( IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* set the value for that element */ virtual IOReturn setElementValue( IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* get the value for that element */ virtual IOReturn getElementValue(IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* commit the changes to the device */ virtual IOReturn commit(UInt32 timeoutMS, IOHIDCallbackFunction callback, void * callbackTarget, void * callbackRefcon); /* Clear all the changes and start over */ virtual IOReturn clear(); /* * Routing gumf for CFPlugIn interfaces */ protected: static inline IOHIDOutputTransactionClass *getThis(void *self) { return (IOHIDOutputTransactionClass *) ((InterfaceMap *) self)->obj; }; // Methods for routing the iocfplugin Interface v1r1 // Methods for routing asynchronous completion plumbing. static IOReturn outputTransactionCreateAsyncEventSource(void *self, CFRunLoopSourceRef *source); static CFRunLoopSourceRef outputTransactionGetAsyncEventSource(void *self); static IOReturn outputTransactionCreateAsyncPort(void *self, mach_port_t *port); static mach_port_t outputTransactionGetAsyncPort(void *self); /* Basic IOHIDQueue interface */ static IOReturn outputTransactionCreate (void * self); static IOReturn outputTransactionDispose (void * self); /* Any number of hid elements can feed the same outputTransaction */ static IOReturn outputTransactionAddElement ( void * self, IOHIDElementCookie elementCookie); static IOReturn outputTransactionRemoveElement ( void * self, IOHIDElementCookie elementCookie); static Boolean outputTransactionHasElement ( void * self, IOHIDElementCookie elementCookie); /* set the default value for that element */ static IOReturn outputTransactionSetElementDefault(void * self, IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* get the default value for that element */ static IOReturn outputTransactionGetElementDefault(void * self, IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* set the value for that element */ static IOReturn outputTransactionSetElementValue(void * self, IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* get the value for that element */ static IOReturn outputTransactionGetElementValue(void * self, IOHIDElementCookie elementCookie, IOHIDEventStruct * valueEvent); /* commit the changes to the device */ static IOReturn outputTransactionCommit( void * self, UInt32 timeoutMS, IOHIDCallbackFunction callback, void * callbackTarget, void * callbackRefcon); /* Clear all the changes and start over */ static IOReturn outputTransactionClear(void * self); /* * Internal functions */ }; #endif /* !_IOKIT_IOHIDOutputTransactionClass_H */