#!/bin/bash

#================================================================================
# Инициализация
#================================================================================

# Определяем местоположение скрипта
SCRIPT_PATH=$(dirname "$(readlink -f "$0")")
# Импортируем общие функции
source $SCRIPT_PATH/console_colors
source $SCRIPT_PATH/super_user_check
source $SCRIPT_PATH/switch_functions
source $SCRIPT_PATH/switch-config

# Проверяем права суперпользователя
check_root_rights

# Зададим имя переключателя
switch_name='switch_gps'
# Зададим модули
modules=('cdc_acm')
# Получаем задаваемый режим
mode=$(echo $1 | tr '[:lower:]' '[:upper:]')


GPS_DEVICE_NAME='ttyS4'
GPS_DEVIE_MODE='0220'
GPS_RULE_PATH='/etc/udev/rules.d/astra-linux-gps-t8s.rules'

#================================================================================
# Функции
#================================================================================
## applyRules
## @brief - Функция применит изменение правил
function applyRules() {
    udevadm control --reload
    udevadm trigger
}

## createBlockRules
## @brief - Функция создаст правило для GPS устройства
function createBlockRules() {
    if [ -c "/dev/$GPS_DEVICE_NAME" ]; then
        echo "KERNEL==\"$GPS_DEVICE_NAME\", MODE=\"$GPS_DEVIE_MODE\"" > "$GPS_RULE_PATH"
        applyRules
    fi
}

## deleteBlockRules
## @brief - Функция удалит правило для GPS устройства
function deleteBlockRules() {
    if [ -f "$GPS_RULE_PATH" ]; then
        rm "$GPS_RULE_PATH"
        applyRules
        chmod 660 "/dev/$GPS_DEVICE_NAME"
    fi
}

#================================================================================
# main
#================================================================================
globalResult=0

for module_name in ${modules[@]}
do
    if [ $globalResult -ne 0 ]; then break; fi

    if [[ "$mode" == "$MODE_EXISTS" ]]; then
        print_module_exists "$module_name"
    else
        # Настроим возможность загрузки модуля при старте системы
        $SCRIPT_PATH/switch_kernel_module_boot "$module_name" "$mode"
        globalResult=$?

        if [ $globalResult -eq 0 ]; then
            # Загрузим или выгрузим модуль системы в райнтайме
            $SCRIPT_PATH/switch_kernel_module_runtime "$module_name" "$mode"
#           globalResult=$?
#           Система может запретить выгрузку модуля в рантайме.
#           Т.К. Мы в любом случаи требуем ребут для применения блокировок, не имеет смысла возвращать результат выгрузки модуля
        fi
    fi
done

# mig t8s check
if dmidecode -t processor | grep -i version | grep -i N5100 ; then
    # t8s fix
    if [[ $mode == $MODE_OFF ]]; then
        createBlockRules
    elif [[ $mode == $MODE_ON ]]; then
        deleteBlockRules
    fi
fi

# При успешном переключении состояния пишем изменение в конфигурационный файл
if [[ $globalResult -eq 0 && "$mode" == @($MODE_ON|$MODE_OFF) ]]; then
    iniSetActive "gps_is_active" $([[ "$mode" == "$MODE_ON" ]] && echo 'true' || echo 'false')
fi

exit $globalResult
#================================================================================
