Пример #1
0
 public int RegisterDeviceChangeEvent(DeviceChangeEventCallbackFunction deviceEventFunc, object obj)
 {
     unsafe
     {
         if (deviceChangeEventList.Count == 0)
         {
             var deviceChangeEventFunctionDelegate = new DeviceChangeEventFunctionDelegate(deviceEventFunction);
             if (obj != null)
             {
                 deviceChangeEventContextHandle        = GCHandle.Alloc(obj);
                 registeredDeviceChangeEventFunctionId = ((!_isWin)
                     ? LinuxInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate,
                                                                (void *)GCHandle.ToIntPtr(deviceChangeEventContextHandle))
                     : WinInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate,
                                                              (void *)GCHandle.ToIntPtr(deviceChangeEventContextHandle)));
             }
             else
             {
                 registeredDeviceChangeEventFunctionId = ((!_isWin)
                     ? LinuxInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate, null)
                     : WinInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate, null));
             }
             if (!callbackFunctionReferenceList.ContainsKey(registeredDeviceChangeEventFunctionId))
             {
                 callbackFunctionReferenceList.Remove(registeredDeviceChangeEventFunctionId);
             }
             callbackFunctionReferenceList.Add(registeredDeviceChangeEventFunctionId,
                                               deviceChangeEventFunctionDelegate);
         }
         this.lastEventID++;
         int lastEventID = this.lastEventID;
         deviceChangeEventList.Add(lastEventID, deviceEventFunc);
         return(lastEventID);
     }
 }
Пример #2
0
        /// <summary>
        /// Register a callback device change event function to be called when a device change event (e.g. change of name, device added) occurs
        /// </summary>
        /// <param name="deviceEventFunc">Callback function to be called</param>
        /// <param name="obj">Context object that will be echoed back when function is called. Only the object when the first function is registered will be used. Set to null if not used.</param>
        /// <returns>Callback event id</returns>
        public unsafe int tdRegisterDeviceChangeEvent(DeviceChangeEventCallbackFunction deviceChangeEventFunc, Object obj)
        {
            int returnValue = 0;

            if (deviceChangeEventList.Count == 0)
            {
                //first added, register with dll too
                //only the context object of the first event will be registered
                UnmanagedImport.DeviceChangeEventFunctionDelegate deviceChangeEventFunctionDelegate = new UnmanagedImport.DeviceChangeEventFunctionDelegate(deviceChangeEventFunction);

                registeredDeviceChangeEventFunctionId = UnmanagedImport.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate, (void *)null);
                GC.Collect();
                callbackFunctionReferenceList.Add(registeredDeviceChangeEventFunctionId, deviceChangeEventFunctionDelegate);
            }
            ++lastEventID;
            returnValue = lastEventID;
            DeviceChangeEventFunctionContext deviceChangeEventFuncContext = new DeviceChangeEventFunctionContext();

            deviceChangeEventFuncContext.changeEventCallbackFunc = deviceChangeEventFunc;
            deviceChangeEventFuncContext.context    = obj;
            deviceChangeEventFuncContext.callbackId = returnValue;
            deviceChangeEventList.Add(returnValue, deviceChangeEventFuncContext);

            return(returnValue);
        }
Пример #3
0
		public int RegisterDeviceChangeEvent(DeviceChangeEventCallbackFunction deviceEventFunc, object obj)
		{
			unsafe
			{
				if (deviceChangeEventList.Count == 0)
				{
					var deviceChangeEventFunctionDelegate = new DeviceChangeEventFunctionDelegate(deviceEventFunction);
					if (obj != null)
					{
						deviceChangeEventContextHandle = GCHandle.Alloc(obj);
						registeredDeviceChangeEventFunctionId = ((!_isWin)
							? LinuxInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate,
								(void*) GCHandle.ToIntPtr(deviceChangeEventContextHandle))
							: WinInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate,
								(void*) GCHandle.ToIntPtr(deviceChangeEventContextHandle)));
					}
					else
					{
						registeredDeviceChangeEventFunctionId = ((!_isWin)
							? LinuxInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate, null)
							: WinInterop.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate, null));
					}
					if (!callbackFunctionReferenceList.ContainsKey(registeredDeviceChangeEventFunctionId))
					{
						callbackFunctionReferenceList.Remove(registeredDeviceChangeEventFunctionId);
					}
					callbackFunctionReferenceList.Add(registeredDeviceChangeEventFunctionId,
						deviceChangeEventFunctionDelegate);
				}
				this.lastEventID++;
				int lastEventID = this.lastEventID;
				deviceChangeEventList.Add(lastEventID, deviceEventFunc);
				return lastEventID;
			}
		}
Пример #4
0
        /// <summary>
        /// Register a callback device change event function to be called when a device change event (e.g. change of name, device added) occurs
        /// </summary>
        /// <param name="deviceEventFunc">Callback function to be called</param>
        /// <param name="obj">Context object that will be echoed back when function is called. Only the object when the first function is registered will be used. Set to null if not used.</param>
        /// <returns>Callback event id</returns>
        public unsafe int tdRegisterDeviceChangeEvent(DeviceChangeEventCallbackFunction deviceChangeEventFunc, Object obj)
        {
            int returnValue = 0;
            if (deviceChangeEventList.Count == 0)
            {
                //first added, register with dll too
                //only the context object of the first event will be registered
                UnmanagedImport.DeviceChangeEventFunctionDelegate deviceChangeEventFunctionDelegate = new UnmanagedImport.DeviceChangeEventFunctionDelegate(deviceChangeEventFunction);

                registeredDeviceChangeEventFunctionId = UnmanagedImport.tdRegisterDeviceChangeEvent(deviceChangeEventFunctionDelegate, (void*)null);
                GC.Collect();
                callbackFunctionReferenceList.Add(registeredDeviceChangeEventFunctionId, deviceChangeEventFunctionDelegate);
            }
            ++lastEventID;
            returnValue = lastEventID;
            DeviceChangeEventFunctionContext deviceChangeEventFuncContext = new DeviceChangeEventFunctionContext();
            deviceChangeEventFuncContext.changeEventCallbackFunc = deviceChangeEventFunc;
            deviceChangeEventFuncContext.context = obj;
            deviceChangeEventFuncContext.callbackId = returnValue;
            deviceChangeEventList.Add(returnValue, deviceChangeEventFuncContext);

            return returnValue;
        }