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); } }
/// <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); }
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; } }
/// <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; }