/// <summary> /// 连接设备并初始化基础服务 /// </summary> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> private bool ConnectAndInitService() { bool result = false; kAMDError kAMDUndefinedError = kAMDError.kAMDUndefinedError; try { if (this.Connect() != (int)kAMDError.kAMDSuccess) { return(false); } //TODO:初始化设备信息 if (MobileDevice.AMDeviceValidatePairing(this.DevicePtr) != (int)kAMDError.kAMDSuccess) { kAMDUndefinedError = (kAMDError)MobileDevice.AMDevicePair(this.DevicePtr); if (kAMDUndefinedError != kAMDError.kAMDSuccess) { this.Disconnect(); return(false); } } this.isSessionOpen = false;//确保Session已打开 if (this.StartSession(false) == (int)kAMDError.kAMDSuccess) { //TODO:初始化服务,填充基础数据 this.isConnected = true; this.StopSession(); result = true; } } catch { } return(result); }
/// <summary> /// 停止Socket服务 /// </summary> /// <param name="inSocket"></param> /// <returns></returns> private bool StopSocketService(ref int socket) { kAMDError kAMDSuccess = kAMDError.kAMDSuccess; if (socket > 0) { try { kAMDSuccess = (kAMDError)MobileDevice.closesocket(socket); } catch (Exception ex) { return(false); } } socket = 0; return(kAMDSuccess != kAMDError.kAMDSuccess); }
/// <summary> /// 链接到设备,用于设备链接失效或者手动推出后重链接操作,此函数只要设备还在USB树上,是无需用户插拔的 /// </summary> /// <returns></returns> public kAMDError Connect() { kAMDError kAMDSuccess = kAMDError.kAMDSuccess; try { if (!this.isConnected) { kAMDSuccess = (kAMDError)MobileDevice.AMDeviceConnect(this.DevicePtr); if (kAMDSuccess == kAMDError.kAMDSuccess) { this.isConnected = true; } } } catch (Exception exception) { Console.WriteLine(exception.ToString()); } return(kAMDSuccess); }
/// <summary> /// 开始监听链接 /// </summary> /// <param name="errorCallBack">链接出错回调</param> public void StartListen() { if (!iSStartListen) { iSStartListen = true; try { deviceNotificationCallback = NotificationCallback; deviceDFUConnectedNotificationCallback = DfuConnectCallback; deviceRecoveryConnectedNotificationCallback = RecoveryConnectCallback; deviceDFUDisConnectedNotificationCallback = DfuDisconnectCallback; deviceRecoveryDisConnectedNotificationCallback = RecoveryDisconnectCallback; IntPtr zero = IntPtr.Zero; kAMDError error = (kAMDError)MobileDevice.AMDeviceNotificationSubscribe(this.deviceNotificationCallback, 0, 1, 0, ref zero); if (error != kAMDError.kAMDSuccess) { if (ListenErrorEvent != null) { ListenErrorEvent(this, new ListenErrorEventHandlerEventArgs("AMDeviceNotificationSubscribe failed with error : " + error.ToString(), ListenErrorEventType.StartListen)); } } IntPtr userInfo = IntPtr.Zero; error = (kAMDError)MobileDevice.AMRestoreRegisterForDeviceNotifications(this.deviceDFUConnectedNotificationCallback, this.deviceRecoveryConnectedNotificationCallback, this.deviceDFUDisConnectedNotificationCallback, this.deviceRecoveryDisConnectedNotificationCallback, 0, ref userInfo); if (error != kAMDError.kAMDSuccess) { if (ListenErrorEvent != null) { ListenErrorEvent(this, new ListenErrorEventHandlerEventArgs("AMRestoreRegisterForDeviceNotifications failed with error : " + error.ToString(), ListenErrorEventType.StartListen)); } } } catch (Exception ex) { if (ListenErrorEvent != null) { ListenErrorEvent(this, new ListenErrorEventHandlerEventArgs(ex.Message, ListenErrorEventType.StartListen)); } } } }
/// <summary> /// 开始监听链接 /// 需要使用线程方式调用 /// </summary> public void StartListen() { if (!iSStartListen) { iSStartListen = true; try { deviceNotificationCallback = NotificationCallback; deviceDFUConnectedNotificationCallback = DfuConnectCallback; deviceRecoveryConnectedNotificationCallback = RecoveryConnectCallback; deviceDFUDisConnectedNotificationCallback = DfuDisconnectCallback; deviceRecoveryDisConnectedNotificationCallback = RecoveryDisconnectCallback; IntPtr zero = IntPtr.Zero; kAMDError error = (kAMDError)MobileDevice.AMDeviceNotificationSubscribe(deviceNotificationCallback, 0, 1, 0, ref zero); if (error != kAMDError.kAMDSuccess) { //Check "Apple Mobile Device Service" status ListenErrorEvent?.Invoke(this, new ListenErrorEventHandlerEventArgs("AMDeviceNotificationSubscribe failed with error : " + error, ListenErrorEventType.StartListen)); } IntPtr userInfo = IntPtr.Zero; error = (kAMDError)MobileDevice.AMRestoreRegisterForDeviceNotifications(deviceDFUConnectedNotificationCallback, deviceRecoveryConnectedNotificationCallback, deviceDFUDisConnectedNotificationCallback, deviceRecoveryDisConnectedNotificationCallback, 0, ref userInfo); if (error != kAMDError.kAMDSuccess) { ListenErrorEvent?.Invoke(this, new ListenErrorEventHandlerEventArgs("AMRestoreRegisterForDeviceNotifications failed with error : " + error, ListenErrorEventType.StartListen)); } //LoopRun CoreFoundation.CFRunLoopRun(); } catch (Exception ex) { if (ListenErrorEvent != null) { ListenErrorEvent(this, new ListenErrorEventHandlerEventArgs(ex.Message, ListenErrorEventType.StartListen)); } } } }