1/* 2 * Copyright (c) 1998-2002 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_LICENSE_HEADER_END@ 21 */ 22/* 23 * IOFireWireLibAsyncStreamListener.h 24 * IOFireWireFamily 25 * 26 * Created by Arul on Thu Sep 28 2006. 27 * Copyright (c) 2006 Apple Computer, Inc. All rights reserved. 28 * 29 * $Log: IOFireWireLibAsyncStreamListener.h,v $ 30 * Revision 1.3 2006/12/13 21:34:23 ayanowit 31 * For 4222965, replaced all io async method calls with new Leopard API version. 32 * 33 * Revision 1.2 2006/12/06 00:01:10 arulchan 34 * Isoch Channel 31 Generic Receiver 35 * 36 * Revision 1.1 2006/09/28 22:31:31 arulchan 37 * New Feature rdar::3413505 38 * 39 */ 40 41#import "IOFireWireLibIUnknown.h" 42#import "IOFireWireLibPriv.h" 43#import "IOFireWireLibIsoch.h" 44#import "IOFireWireLib.h" 45 46namespace IOFireWireLib { 47 48 class Device ; 49 class AsyncStreamListener: public IOFireWireIUnknown 50 { 51 protected: 52 53 typedef ::IOFWAsyncStreamListenerInterfaceRef AsyncStreamListenerRef ; 54 typedef ::IOFWAsyncStreamListenerHandler AsyncStreamListenerHandler ; 55 typedef ::IOFWAsyncStreamListenerSkippedPacketHandler AsyncStreamSkippedPacketHandler ; 56 57 public: 58 AsyncStreamListener( const IUnknownVTbl& interface, 59 Device& userclient, 60 UserObjectHandle inKernAddrSpaceRef, 61 void* inBuffer, 62 UInt32 inBufferSize, 63 void* inCallBack = 0, 64 void* inRefCon = 0) ; 65 66 virtual ~AsyncStreamListener() ; 67 68 public: 69 const AsyncStreamListenerHandler SetListenerHandler ( 70 AsyncStreamListenerRef self, 71 AsyncStreamListenerHandler inReceiver ) ; 72 73 const AsyncStreamSkippedPacketHandler SetSkippedPacketHandler( AsyncStreamListenerRef self, 74 AsyncStreamSkippedPacketHandler inHandler ) ; 75 76 Boolean NotificationIsOn ( 77 AsyncStreamListenerRef self ) ; 78 79 Boolean TurnOnNotification ( 80 AsyncStreamListenerRef self ) ; 81 82 void TurnOffNotification ( 83 AsyncStreamListenerRef self ) ; 84 85 void ClientCommandIsComplete ( 86 AsyncStreamListenerRef self, 87 FWClientCommandID commandID ) ; 88 89 void* GetRefCon ( 90 AsyncStreamListenerRef self ) ; 91 92 void SetFlags ( 93 AsyncStreamListenerRef self, 94 UInt32 flags ); 95 96 UInt32 GetFlags ( 97 AsyncStreamListenerRef self ) ; 98 99 UInt32 GetOverrunCounter ( 100 AsyncStreamListenerRef self ) ; 101 102 AsyncStreamListenerHandler GetListenerHandler( 103 AsyncStreamListenerRef self ) { return mListener; } ; 104 105 AsyncStreamSkippedPacketHandler GetSkippedPacketHandler( 106 AsyncStreamListenerRef self ) { return mSkippedPacketHandler;} ; 107 108 static void Listener( AsyncStreamListenerRef refcon, IOReturn result, void** args, int numArgs) ; 109 110 static void SkippedPacket( AsyncStreamListenerRef refCon, IOReturn result, FWClientCommandID commandID, UInt32 packetCount) ; 111 112 void* GetBuffer( 113 AsyncStreamListenerRef self ) ; 114 115 const UInt32 GetBufferSize( 116 AsyncStreamListenerRef self ) ; 117 118 protected: 119 Device& mUserClient ; 120 UserObjectHandle mKernAsyncStreamListenerRef ; 121 122 UInt32 mChannel ; 123 char* mBuffer ; 124 Boolean mNotifyIsOn ; 125 void* mUserRefCon ; 126 UInt32 mBufferSize ; 127 CFMutableDictionaryRef mPendingLocks ; 128 UInt32 mFlags; 129 130 AsyncStreamListenerHandler mListener ; 131 AsyncStreamSkippedPacketHandler mSkippedPacketHandler ; 132 AsyncStreamListenerRef mRefInterface ; 133 } ; 134 135 class AsyncStreamListenerCOM: public AsyncStreamListener 136 { 137 typedef ::IOFWAsyncStreamListenerInterface Interface ; 138 139 public: 140 AsyncStreamListenerCOM( Device& userclient, 141 UserObjectHandle inKernAddrSpaceRef, 142 void* inBuffer, 143 UInt32 inBufferSize, 144 void* inCallBack, 145 void* inRefCon ) ; 146 147 virtual ~AsyncStreamListenerCOM() ; 148 149 private: 150 static Interface sInterface ; 151 152 public: 153 static IUnknownVTbl** Alloc( Device& inUserClient, 154 UserObjectHandle inKernAddrSpaceRef, 155 void* inBuffer, 156 UInt32 inBufferSize, 157 void* inCallBack, 158 void* inRefCon ); 159 160 virtual HRESULT QueryInterface( REFIID iid, void ** ppv ) ; 161 162 protected: 163 static const AsyncStreamListenerHandler SSetListenerHandler ( 164 AsyncStreamListenerRef self, 165 AsyncStreamListenerHandler inReceiver ) ; 166 167 static const AsyncStreamSkippedPacketHandler SSetSkippedPacketHandler( AsyncStreamListenerRef self, 168 AsyncStreamSkippedPacketHandler inHandler ) ; 169 170 static Boolean SNotificationIsOn ( 171 AsyncStreamListenerRef self ) ; 172 173 static Boolean STurnOnNotification ( 174 AsyncStreamListenerRef self ) ; 175 176 static void STurnOffNotification ( 177 AsyncStreamListenerRef self ) ; 178 179 static void SClientCommandIsComplete ( 180 AsyncStreamListenerRef self, 181 FWClientCommandID commandID, 182 IOReturn status ) ; 183 184 static void* SGetRefCon ( 185 AsyncStreamListenerRef self ) ; 186 187 static void SSetFlags ( 188 AsyncStreamListenerRef self, 189 UInt32 flags ); 190 191 static UInt32 SGetFlags ( 192 AsyncStreamListenerRef self ) ; 193 194 static UInt32 SGetOverrunCounter ( 195 AsyncStreamListenerRef self ) ; 196 197 }; 198}