private async void Accelerometer_Click(object sender, RoutedEventArgs e)
        {
            if (i2cMasters.Count() < 1)
            {
                return;
            }
            var       sc             = i2cMasters[0];
            I2cMaster tempController = new I2cMaster()
            {
                name         = sc.name,
                device       = sc.device,
                info         = sc.info,
                write        = "0x31, 0x01, 0x2D, 0x08",
                writeRead    = "0x32",
                slaveAddress = "0x53",
                readSize     = 6,
                busSpeed     = I2cBusSpeed.FastMode
            };
            bool activate = (sc.device == null || sc.slaveAddress != tempController.slaveAddress);

            if (activate)
            {
                await i2cActivate(tempController);
            }
            i2cWrite(tempController, I2cSendMode.Write);
            i2cWrite(tempController, I2cSendMode.WriteRead);
            if (tempController.device != null && activate)
            {
                tempController.device.Dispose();
            }
            await i2cActivate(sc);
        }
        private void Read_Click(object sender, RoutedEventArgs e)
        {
            Button    button = sender as Button;
            I2cMaster master = button.DataContext as I2cMaster;

            i2cWrite(master, I2cSendMode.Read);
        }
        private void i2cWrite(I2cMaster master, I2cSendMode sendMode)
        {
            if (master == null)
            {
                return;
            }
            if (master.device != null)
            {
                string addressUsed = HexConverter.ByteToString(master.device.ConnectionSettings.SlaveAddress);
                try
                {
                    string result = "";
                    switch (sendMode)
                    {
                    case I2cSendMode.Write:
                        byte[] SendBuf = HexConverter.StringToByteArray(master.write);
                        if (SendBuf.Count() > 0)
                        {
                            result = master.device.WritePartial(SendBuf).Status.ToString();
                            status.Log(string.Format(LocalizableStrings.IOT_I2C_WRITE, master.name, HexConverter.ByteToString(SendBuf), addressUsed));
                        }
                        break;

                    case I2cSendMode.WriteRead:
                        byte[] WriteBuf = HexConverter.StringToByteArray(master.writeRead);
                        if (WriteBuf.Count() > 0)
                        {
                            byte[] ReadBuf = new byte[master.readSize];
                            result = master.device.WriteReadPartial(WriteBuf, ReadBuf).Status.ToString();
                            status.Log(string.Format(LocalizableStrings.IOT_I2C_WRITE, master.name, HexConverter.ByteToString(WriteBuf), addressUsed));
                            status.Log(string.Format(LocalizableStrings.IOT_I2C_READ, master.name, HexConverter.ByteToString(ReadBuf), addressUsed));
                        }
                        break;

                    case I2cSendMode.Read:
                        byte[] RecBuf = new byte[master.readSize];
                        result = master.device.ReadPartial(RecBuf).Status.ToString();
                        status.Log(string.Format(LocalizableStrings.IOT_I2C_READ, master.name, HexConverter.ByteToString(RecBuf), addressUsed));
                        break;
                    }
                    status.Log(result);
                }
                catch
                {
                    status.Log(string.Format(LocalizableStrings.IOT_I2C_NORESPONSE, master.name, addressUsed));
                }
            }
            else
            {
                status.Log(string.Format(LocalizableStrings.IOT_I2C_NOT_INITIALIZED, master.name));
            }
        }
        private void deactivate_Click(object sender, RoutedEventArgs e)
        {
            Button    button = sender as Button;
            I2cMaster master = button.DataContext as I2cMaster;

            if (master != null)
            {
                if (master.device != null)
                {
                    master.device.Dispose();
                    master.device = null;
                }
            }
        }
        private async void Eeprom_Click(object sender, RoutedEventArgs e)
        {
            if (i2cMasters.Count() < 1)
            {
                return;
            }
            var       sc             = i2cMasters[0];
            I2cMaster tempController = new I2cMaster()
            {
                name         = sc.name,
                device       = sc.device,
                info         = sc.info,
                write        = "0 0 0 0xff 1",
                writeRead    = "0 0 0 0xff",
                slaveAddress = "0x50",
                readSize     = 1,
                busSpeed     = I2cBusSpeed.FastMode
            };
            var  array = HexConverter.StringToByteArray(sc.write);
            byte address, data;

            if (array.Count() >= 2)
            {
                address = array[0];
                data    = array[1];
                string write = string.Format("0 {0} {0} 0xff ", address);
                tempController.write     = write + data;
                tempController.writeRead = write;
            }
            bool activate = (sc.device == null || sc.slaveAddress != tempController.slaveAddress);

            if (activate)
            {
                await i2cActivate(tempController);
            }
            i2cWrite(tempController, I2cSendMode.Write);
            i2cWrite(tempController, I2cSendMode.WriteRead);
            if (tempController.device != null && activate)
            {
                tempController.device.Dispose();
            }
            await i2cActivate(sc);
        }
        private async Task i2cActivate(I2cMaster master)
        {
            if (master == null)
            {
                return;
            }

            if (master.device != null)
            {
                master.device.Dispose();
                master.device = null;
            }

            var address = HexConverter.StringToByteArray(master.slaveAddress);

            if (address.Count() < 1)
            {
                status.Log(string.Format(LocalizableStrings.IOT_I2C_ADDRESS_INVALID, master.name));
                return;
            }
            var settings = new I2cConnectionSettings(address.First());

            settings.BusSpeed = master.busSpeed;
            try
            {
                master.device = await I2cDevice.FromIdAsync(master.info.Id, settings);

                string addressUsed = HexConverter.ByteToString(master.device.ConnectionSettings.SlaveAddress);
                if (master.device == null)
                {
                    status.Log(string.Format(LocalizableStrings.IOT_I2C_IN_USE, addressUsed, master.name));
                }
                status.Log(string.Format(LocalizableStrings.IOT_I2C_INITIALIZED, addressUsed, master.name));
            }
            catch (Exception ex)
            {
                status.Log(string.Format(LocalizableStrings.IOT_I2C_INITIALIZE_FAILED, ex.Message));
            }
        }