private unsafe void Initialize() { if (_deviceFileDescriptor >= 0) { return; } string deviceFileName = $"{DevicePath}-{_settings.BusId}"; lock (s_initializationLock) { if (_deviceFileDescriptor >= 0) { return; } _deviceFileDescriptor = Interop.open(deviceFileName, FileOpenFlags.O_RDWR); if (_deviceFileDescriptor < 0) { throw new IOException($"Error {Marshal.GetLastWin32Error()}. Can not open I2C device file '{deviceFileName}'."); } I2cFunctionalityFlags tempFlags; int result = Interop.ioctl(_deviceFileDescriptor, (uint)I2cSettings.I2C_FUNCS, new IntPtr(&tempFlags)); if (result < 0) { _functionalities = 0; } _functionalities = tempFlags; } }
private unsafe void Initialize() { if (_deviceFileDescriptor >= 0) { return; } string deviceFileName = $"{DevicePath}-{_settings.BusId}"; _deviceFileDescriptor = open(deviceFileName, FileOpenFlags.O_RDWR); if (_deviceFileDescriptor < 0) { throw Utils.CreateIOException($"Cannot open I2c device file '{deviceFileName}'", _deviceFileDescriptor); } fixed(I2cFunctionalityFlags *functionalitiesPtr = &_functionalities) { int ret = ioctl(_deviceFileDescriptor, (uint)I2cSettings.I2C_FUNCS, new IntPtr(functionalitiesPtr)); if (ret < 0) { _functionalities = 0; } } }