public void FindExistingExtensions()
    {
        List <string> subTypes = GetExtensionsSubTypes();
        Dictionary <string, UduinoExtension> availableExtensions = new Dictionary <string, UduinoExtension>(Manager.AvailableExtensions);

        foreach (KeyValuePair <string, UduinoExtension> u in availableExtensions)
        {
            if (subTypes.Contains(u.Key))
            {
                UduinoExtension a = u.Value;
                if (!a.isPresent)
                {
                    a.isPresent = true;
                    Manager.AvailableExtensions.Remove(u.Key);
                    Manager.AvailableExtensions.Add(u.Key, a);
                }
            }
        }
    }
    public override void OnInspectorGUI()
    {
        if (manager == null)
        {
            manager = (UduinoManager)target;
        }

        baudRateIndex = System.Array.IndexOf(baudRates, Manager.BaudRate.ToString());

        Log.SetLogLevel(manager.debugLevel);
        SetColorAndStyles();

        DrawLogo();

        defaultPanel = DrawHeaderTitle("Uduino Settings", defaultPanel, headerColor);

        if (defaultPanel)
        {
            CheckCompatibility();

            GUILayout.Label("Connection type", EditorStyles.boldLabel);

            EditorGUI.indentLevel++;

            Dictionary <string, UduinoExtension> availableExtensions = new Dictionary <string, UduinoExtension>(Manager.AvailableExtensions);
            foreach (KeyValuePair <string, UduinoExtension> u in availableExtensions)
            {
                if (u.Value.isPresent)
                {
                    GUILayout.BeginHorizontal();
                    bool isActiveValue = EditorGUILayout.Toggle(u.Value.name, u.Value.isActive);
                    if (isActiveValue != u.Value.isActive)
                    {
                        UduinoExtension changedExtension = u.Value;
                        changedExtension.isActive = isActiveValue;
                        Manager.AvailableExtensions.Remove(u.Key);
                        Manager.AvailableExtensions.Add(u.Key, changedExtension);
                    }
                    GUILayout.EndHorizontal();
                }
            }
            EditorGUI.indentLevel--;


            GUILayout.Label("General", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            LogLevel tmpLogLevel = (LogLevel)EditorGUILayout.EnumPopup("Log Level", Manager.debugLevel);
            if (tmpLogLevel != Manager.debugLevel)
            {
                Manager.debugLevel = tmpLogLevel;
                EditorUtility.SetDirty(target);
            }

            EditorGUI.indentLevel--;
            GUILayout.Label("Arduino", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;

            baudRateIndex = EditorGUILayout.Popup("Baud Rate", baudRateIndex, baudRates);
            if (prevBaudRateIndex != baudRateIndex)
            {
                int result = 9600;
                int.TryParse(baudRates[baudRateIndex], out result);
                manager.BaudRate  = result;
                prevBaudRateIndex = baudRateIndex;
            }

            Manager.ReadOnThread = EditorGUILayout.Toggle("Read on threads", Manager.ReadOnThread);
            EditorGUI.indentLevel--;

            GUILayout.Label("Messages", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            if (manager.LimitSendRate = EditorGUILayout.Toggle("Limit Send Rate", Manager.LimitSendRate))
            {
                if (manager.LimitSendRate)
                {
                    Manager.SendRateSpeed = EditorGUILayout.IntField("Send Rate speed", Manager.SendRateSpeed);
                    EditorGUILayout.Separator();
                }
            }

            EditorGUI.indentLevel--;

            EditorGUILayout.Separator();
            CheckUpdate();
        }

        arduinoPanel = DrawHeaderTitle("Adruino", arduinoPanel, headerColor);
        if (arduinoPanel)
        {
            ArduinoSettings();
        }

        advancedPanel = DrawHeaderTitle("Advanced", advancedPanel, headerColor);
        if (advancedPanel)
        {
            AdvancedSettings();
        }


        //TODO : We add that here beacause we the values serialized are not updated
        if (!Application.isPlaying)
        {
            EditorUtility.SetDirty(target);
        }
    }