#!/system/bin/sh

TAG=udisk_check
UDISK_PATH=/mnt/usb_storage
DATA_PATH=/data
LOG_FILE=$DATA_PATH/udisk_check.log
CONFIG_INI_FILE=$UDISK_PATH/admin/config.ini
CONFIG_INI_DONE_FILE=$UDISK_PATH/admin/config.ini.done
UPDATE_FILE=$UDISK_PATH/update.zip
UPDATE_FILE_BACKUP=$UDISK_PATH/update.zip.backup
SYS_GPIO_EXPORT_FILE=/sys/class/gpio/export
SYS_GPIO_DIRECTION_FILE=/sys/class/gpio/gpio86/direction
SYS_GPIO_VALUE_FILE=/sys/class/gpio/gpio86/value
SYS_FORCE_USB_MODE_FILE=/sys/bus/platform/drivers/usb20_otg/force_usb_mode

KEY_USB_MODE=usb.mode
VALUE_USB_MODE_SLAVE=slave
KEY_BOOT_MODE=boot.mode
VALUE_BOOT_MODE_BOOTLOADER=bootloader
VALUE_BOOT_MODE_FASTBOOT=fastboot
VALUE_BOOT_MODE_RECOVERY=recovery

size=`busybox du -m -x ${LOG_FILE} | busybox awk '{print $1}'`
echo "[$(date) $TAG] ${LOG_FILE} file size is ${size}"
echo "[$(date) $TAG] ${LOG_FILE} file size is ${size}" >> $LOG_FILE
if [ $size -gt 2 ]; then
    echo "${LOG_FILE} file size ${size} greater than 2m, will be removed."
    rm $LOG_FILE
fi

count=0
while [ $count -le 10 ]
do
    if [ $count -eq 0 ]; then
        echo "[$(date) $TAG] wait $count time"
        echo "[$(date) $TAG] wait $count time" >> $LOG_FILE
    else
        echo "[$(date) $TAG] wait $count times"
        echo "[$(date) $TAG] wait $count times" >> $LOG_FILE
    fi
    USB_MOUNT_INFO=`mount | busybox grep "$UDISK_PATH"`
    #echo $USB_MOUNT_INFO
    if [ -n "$USB_MOUNT_INFO" ]; then
       echo "[$(date) $TAG] $UDISK_PATH mounted"
       echo "[$(date) $TAG] $UDISK_PATH mounted" >> $LOG_FILE
       break
    else
      sleep 2
      let count++
    fi
done

if [ -f $CONFIG_INI_DONE_FILE ]; then
    echo "[$(date) $TAG] $CONFIG_INI_DONE_FILE is exist."
    echo "[$(date) $TAG] $CONFIG_INI_DONE_FILE is exist." >> $LOG_FILE
    if [ -f $UPDATE_FILE ]; then
        mv $UPDATE_FILE $UPDATE_FILE_BACKUP
    fi
    return
fi

if [ ! -f $CONFIG_INI_FILE ]; then
    echo "[$(date) $TAG] $CONFIG_INI_FILE is not exist"
    echo "[$(date) $TAG] $CONFIG_INI_FILE is not exist" >> $LOG_FILE
    return
fi

while read line
do
    echo $line
    key=${line%%=*}
    value=${line#*=}
    #echo "$key=$value"
    if [ $key == $KEY_BOOT_MODE ]; then
        if [ $value == $VALUE_BOOT_MODE_BOOTLOADER ]; then
            echo "[$(date) $TAG] boot.mode=$value"
            echo "[$(date) $TAG] boot.mode=$value" >> $LOG_FILE
            mv $CONFIG_INI_FILE $CONFIG_INI_DONE_FILE
            reboot bootloader
        elif [ $value == $VALUE_BOOT_MODE_FASTBOOT ]; then
            echo "[$(date) $TAG] boot.mode=$value"
            echo "[$(date) $TAG] boot.mode=$value" >> $LOG_FILE
            mv $CONFIG_INI_FILE $CONFIG_INI_DONE_FILE
            reboot fastboot
        elif [ $value == $VALUE_BOOT_MODE_RECOVERY ]; then
            echo "[$(date) $TAG] boot.mode=$value"
            echo "[$(date) $TAG] boot.mode=$value" >> $LOG_FILE
            if [ -f $UPDATE_FILE ]; then
                mv $CONFIG_INI_FILE $CONFIG_INI_DONE_FILE
                echo "[$(date) $TAG] $UPDATE_FILE is exist."
                echo "[$(date) $TAG] $UPDATE_FILE is exist." >> $LOG_FILE
                reboot recovery
            else
                echo "[$(date) $TAG] $UPDATE_FILE is not exist."
                echo "[$(date) $TAG] $UPDATE_FILE is not exist." >> $LOG_FILE
                break
            fi
        fi
    elif [ $key == $KEY_USB_MODE ]; then
        if [ $value == $VALUE_USB_MODE_SLAVE ]; then
            echo "[$(date) $TAG] usb.mode=$value"
            echo "[$(date) $TAG] usb.mode=$value" >> $LOG_FILE
            mv $CONFIG_INI_FILE $CONFIG_INI_DONE_FILE
            echo 86 > $SYS_GPIO_EXPORT_FILE
            echo out > $SYS_GPIO_DIRECTION_FILE
            echo 0 > $SYS_GPIO_VALUE_FILE
            echo 0 > $SYS_FORCE_USB_MODE_FILE
            echo 2 > $SYS_FORCE_USB_MODE_FILE
        fi
    else
        echo "[$(date) $TAG] $key=$value unknown"
        echo "[$(date) $TAG] $key=$value unknown" >> $LOG_FILE
        break;
    fi
done < $CONFIG_INI_FILE

if [ -f $CONFIG_INI_FILE ]; then
    mv $CONFIG_INI_FILE $CONFIG_INI_DONE_FILE
fi
if [ -f $CONFIG_INI_DONE_FILE ]; then
    if [ -f $UPDATE_FILE ]; then
        mv $UPDATE_FILE $UPDATE_FILE_BACKUP
    fi
fi