Changeset 5517
- Timestamp:
- 05/11/08 17:17:09 (5 days ago)
- Files:
-
- Spiral/trunk/SPBluetoothRemote.h (modified) (4 diffs)
- Spiral/trunk/SPBluetoothRemote.m (modified) (10 diffs)
- Spiral/trunk/SPPS3Remote.m (modified) (2 diffs)
- Spiral/trunk/SPWiiRemote.m (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
Spiral/trunk/SPBluetoothRemote.h
r5472 r5517 31 31 #define SPBluetoothRemoteWillConnect @"SPBluetoothRemoteWillConnect" 32 32 #define SPBluetoothRemoteDidConnect @"SPBluetoothRemoteDidConnect" 33 #define SPBluetoothRemoteDidDisconnect @"SPBluetoothRemoteDidDisconnect" 33 34 34 35 … … 39 40 IOBluetoothL2CAPChannel *_interruptChannel; 40 41 42 IOBluetoothUserNotification *_disconnectNotification; 43 41 44 BOOL _controlCompleted; 42 45 BOOL _controlConnected; … … 46 49 BOOL _connected; 47 50 BOOL _connecting; 51 52 BOOL _logging; 48 53 } 49 54 … … 53 58 54 59 - (void)connectAfterDelay; 60 - (void)disconnectAfterDelay; 55 61 - (void)remoteDidConnect; 56 62 Spiral/trunk/SPBluetoothRemote.m
r5471 r5517 37 37 - (BOOL)_connectControlAsync; 38 38 - (BOOL)_connectInterruptAsync; 39 - (void)_disconnect; 39 40 40 41 @end … … 44 45 45 46 + (IOBluetoothDevice *)_recentRemoteDevice { 46 NSArray * recentDevices;47 NSArray *devices; 47 48 IOBluetoothDevice *device; 48 49 49 recentDevices = [IOBluetoothDevice recentDevices:0];50 51 for(device in recentDevices) {50 devices = [IOBluetoothDevice recentDevices:0]; 51 52 for(device in devices) { 52 53 if([[device getName] isEqualToString:[self remoteName]]) 53 54 return device; … … 72 73 return NO; 73 74 75 [_disconnectNotification unregister]; 76 _disconnectNotification = [_device registerForDisconnectNotification:self selector:@selector(bluetoothDeviceDidDisconnect:device:)]; 77 74 78 if(!_controlConnected && [[self class] needsControlChannel]) { 75 79 if(![self _connectControlAsync]) … … 92 96 _controlCompleted = NO; 93 97 98 if(_logging) 99 NSLog(@"*** -[%@ _connectControlAsync]", [self class]); 100 94 101 result = [_device openL2CAPChannelAsync:&_controlChannel withPSM:kBluetoothL2CAPPSMHIDControl delegate:self]; 95 102 … … 104 111 _interruptCompleted = NO; 105 112 113 if(_logging) 114 NSLog(@"*** -[%@ _connectInterruptAsync]", [self class]); 115 106 116 result = [_device openL2CAPChannelAsync:&_interruptChannel withPSM:kBluetoothL2CAPPSMHIDInterrupt delegate:self]; 107 117 108 118 return (result == kIOReturnSuccess); 119 } 120 121 122 123 - (void)_disconnect { 124 NSLog(@"*** -[%@ _disconnect]", [self class]); 125 126 if(_controlConnected) 127 [_controlChannel closeChannel]; 128 129 if(_interruptConnected) 130 [_interruptChannel closeChannel]; 131 132 [_device closeConnection]; 109 133 } 110 134 … … 142 166 _device = [[[self class] _recentRemoteDevice] retain]; 143 167 168 if(_device) 169 [self connectAfterDelay]; 170 144 171 [IOBluetoothDevice registerForConnectNotifications:self selector:@selector(bluetoothDeviceDidConnect:device:)]; 145 172 … … 164 191 [[NSNotificationCenter defaultCenter] postNotificationName:SPBluetoothRemoteWillConnect object:self]; 165 192 166 [self performSelector:@selector(_connect) afterDelay:1.0]; 193 [self performSelectorOnce:@selector(_connect) afterDelay:1.0]; 194 } 195 196 197 198 - (void)disconnectAfterDelay { 199 [self performSelectorOnce:@selector(_disconnect) afterDelay:1800.0]; 167 200 } 168 201 … … 205 238 _controlCompleted = YES; 206 239 _controlConnected = (status == kIOReturnSuccess); 240 241 if(_logging) 242 NSLog(@"*** -[%@ l2capChannelOpenComplete:status::] control %s", [self class], mach_error_string(status)); 207 243 } 208 244 else if(channel == _interruptChannel) { 209 245 _interruptCompleted = YES; 210 246 _interruptConnected = (status == kIOReturnSuccess); 247 248 if(_logging) 249 NSLog(@"*** -[%@ l2capChannelOpenComplete:status::]: interrupt %s", [self class], mach_error_string(status)); 211 250 } 212 251 … … 234 273 - (void)bluetoothDeviceDidConnect:(IOBluetoothUserNotification *)notification device:(IOBluetoothDevice *)device { 235 274 if([[device getName] isEqualToString:[[self class] remoteName]]) { 275 _logging = YES; 276 277 NSLog(@"*** -[%@ bluetoothDeviceDidConnect:device::]: %@", [self class], [device getName]); 278 236 279 [device retain]; 237 280 [_device release]; … … 243 286 } 244 287 288 289 290 - (void)bluetoothDeviceDidDisconnect:(IOBluetoothUserNotification *)notification device:(IOBluetoothDevice *)device { 291 if([[device getName] isEqualToString:[[self class] remoteName]]) { 292 _logging = YES; 293 294 NSLog(@"*** -[%@ bluetoothDeviceDidDisconnect:device::]: %@", [self class], [device getName]); 295 296 _controlConnected = NO; 297 _interruptConnected = NO; 298 _connected = NO; 299 300 [[NSNotificationCenter defaultCenter] postNotificationName:SPBluetoothRemoteDidDisconnect object:self]; 301 } 302 } 303 245 304 @end Spiral/trunk/SPPS3Remote.m
r5472 r5517 106 106 #pragma mark - 107 107 108 - (void)remoteDidConnect { 109 [self disconnectAfterDelay]; 110 111 [super remoteDidConnect]; 112 } 113 114 115 116 #pragma mark - 117 108 118 - (void)setDelegate:(id <SPPS3RemoteDelegate>)aDelegate { 109 119 delegate = aDelegate; … … 239 249 240 250 [self _handleButton:buffer[5]]; 251 252 [self disconnectAfterDelay]; 241 253 } 242 254 Spiral/trunk/SPWiiRemote.m
r5479 r5517 153 153 [self _enableLEDLight1]; 154 154 155 [self disconnectAfterDelay]; 156 155 157 [super remoteDidConnect]; 156 158 } … … 292 294 if(length == 4 && buffer[1] == 0x30) 293 295 [self _handleButton:buffer[2] << 8 | buffer[3]]; 296 297 [self disconnectAfterDelay]; 294 298 } 295 299
