示例#1
0
        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;
            }
        }
示例#2
0
        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;
                }
            }
        }