#!/usr/bin/bash

# Language support by Charles K. Barcza - www.blackpanther.hu
set -x
case $LANG in
	hu*)
    	    SELECT_EEPROM='EEPROM típus kiválasztása'
            CHIP_TYPE='Chip típusa'
            CHIP_MODEL='Chip modell'
            MANUFACT='Gyártó:'
            CONNECT_ADAPTER='Csatlakoztassa az 1,8 voltos adaptert'
            CHIP_FOUND='Chip megtalálható'
            VOLUME=''
            MANUFACTURER_NOT_FOUND='Gyártó nem található'
            SUPPLY_VOLT='Tápfeszültség'
            CHOOSE_ACTION='Válasszon egy műveletet'
            ACTION='Művelet'
            COUNT='Beolvasás'
            WRITE='Írás'
            WRITE_VERIFY='Írás/Ellenőrzés'
            ERASE='Kitöröl'
            ENTER_FILENAME='Fájnév megadása'
            FILENAME_TO_SAVE='Add meg a fájnevet a mentéshez:'
            SELECT_DIR_TO_FILE='Válassz egy mappát a fájl mentéséhez'
            READING='Olvasás'
            PROCESS_WAIT='Kérlek várj amíg a folyamat tart...'
            SELECT_FILE_TO_WRITE='Válasszon ki egy fájlt a chip írásához'
            REC='Rögzítés'
            ERASING='Törlés'
            READY='Kész'
            NOT_CONNECTED='CH341A programozó nincs csatlkoztatva!'
	;;
	ru*)
            SELECT_EEPROM='Выберите тип EEPROM'
            CHIP_TYPE='Тип микросхемы'
            CHIP_MODEL='Модель микросхемы'
            MANUFACT='Производитель:'
            CONNECT_ADAPTER='Пожалуйста подключите адаптер на 1,8 вольт'
            CHIP_FOUND='Найдена микросхема'
            VOLUME='Объем:'
            MANUFACTURER_NOT_FOUND='Производитель не найден'
            SUPPLY_VOLT='TНапряжение питания'
            CHOOSE_ACTION='Выберите действие'
            ACTION='Действие'
            COUNT='Считать'
            WRITE='Записать'
            WRITE_VERIFY='Записать/проверить'
            ERASE='Стереть'
            ENTER_FILENAME='Введите имя файла'
            FILENAME_TO_SAVE='Имя файла для сохранения:'
            SELECT_DIR_TO_FILE='Выберите каталог для сохранения файла'
            READING='Olvasás'
            PROCESS_WAIT='Kérlek várj amíg a folyamat tart...'
            SELECT_FILE_TO_WRITE='Выберите файл для записи микросхемы'
            REC='Запись'
            ERASING='Стирание'
            READY='Готово'
            NOT_CONNECTED='Программатор CH341A не подключен!'

	;;
	*)
            SELECT_EEPROM='Select EEPROM type'
            CHIP_TYPE='Chip type'
            CHIP_MODEL='Chip model'
            MANUFACT='Manufacturer:'
            CONNECT_ADAPTER='Please connect the 1.8 volt adapter'
            CHIP_FOUND='Chip found'
            VOLUME='Volume:'
            MANUFACTURER_NOT_FOUND='Manufacturer not found'
            SUPPLY_VOLT='Supply voltage'
            CHOOSE_ACTION='Choose a action'
            ACTION='Action'
            COUNT='Count'
            WRITE='Write'
            WRITE_VERIFY='Write/Verify'
            ERASE='Erase'
            ENTER_FILENAME='Add filename'
            FILENAME_TO_SAVE='Enter filename to save:'
            SELECT_DIR_TO_FILE='Select a directory to save the file'
            READING='Reading'
            PROCESS_WAIT='Please wait, the process is running...'
            SELECT_FILE_TO_WRITE='Select a file to write the chip'
            REC='Recording'
            ERASING='Erasing'
            READY='Ready'
            NOT_CONNECTED='CH341A programmer not connected!'
	;;
esac

mode=""
t1="24Cxx - Two-Wire Serial EEPROM"
t2="93Cxx - MICROWIRE Serial EEPROM"
ch_dev=$(lsusb | grep "1a86:" -o)
echo $ch_dev
if [[ "$ch_dev" == "1a86:" ]]
then
epromtype=$(zenity --height=320 --width=320 --list --radiolist --text \
"$SELECT_EEPROM:" --column="Set" --column="$CHIP_TYPE"\
 FALSE "24Cxx - Two-Wire Serial EEPROM"\
 FALSE "93Cxx - MICROWIRE Serial EEPROM"\
 FALSE "25Cxx - NAND FLASH EEPROM"\
 FALSE "25Qxx - NOR FLASH EEPROM")
 if [ -n "$epromtype" ]
 then
     if [[ "$epromtype" == "24Cxx - Two-Wire Serial EEPROM" ]]
     then
     echo "24Cxx selected"
     eeprom_model=$(zenity --height=330 --width=320 --list --radiolist --text \
"24Cxx - Two-Wire Serial EEPROM:" --column="Set" --column="$CHIP_MODEL"\
 TRUE "24c01"\
 FALSE "24c02"\
 FALSE "24c04"\
 FALSE "24c16"\
 FALSE "24c32"\
 FALSE "24c64"\
 FALSE "24c128"\
 FALSE "24c256"\
 FALSE "24c512"\ )
     fi
     if [[ "$epromtype" == "93Cxx - MICROWIRE Serial EEPROM" ]]
     then
     echo "93Cxx selected"
     eeprom_model=$(zenity --height=320 --width=320 --list --radiolist --text \
"93Cxx - Microwire EEPROM:" --column="Set" --column="$CHIP_MODEL"\
 TRUE "93c06"\
 FALSE "93c16"\
 FALSE "93c46"\
 FALSE "93c56"\
 FALSE "93c66"\
 FALSE "93c76"\
 FALSE "93c86"\
 FALSE "93c96"\ )
     fi
     if [ "$epromtype" == "25Cxx - NAND FLASH EEPROM" ] || [ "$epromtype" == "25Qxx - NOR FLASH EEPROM" ]
     then
        echo "NOR or NAND selected"
        manufacture="$MANUFACT"
        info=$(SNANDer -i)
        if [[ $info == *"id: 7f"* ]]
          then
          zenity --warning \
          --text="${CONNECT_ADAPTER}!"
          fi
        man_code=$(echo "$info" | grep 'spi device id:')
        dev_vcc=$(echo "$info" | grep 'VCC:')
        if [[ $man_code == *"spi device id:"* ]] 
          then
             if [[ $man_code == *"id: 01"* ]]; then man_name="SPANSION"; fi
             if [[ $man_code == *"id: 0b"* ]]; then man_name="XTX"; fi
             if [[ $man_code == *"id: 1c"* ]]; then man_name="Eon"; fi
             if [[ $man_code == *"id: 1f"* ]]; then man_name="Atmel"; fi
             if [[ $man_code == *"id: 20"* ]]; then man_name="Micron"; fi
             if [[ $man_code == *"id: 5e"* ]]; then man_name="Zbit"; fi
             if [[ $man_code == *"id: 68"* ]]; then man_name="Boya"; fi
             if [[ $man_code == *"id: 7f"* ]]; then man_name="ISSI"; fi
             if [[ $man_code == *"id: 85"* ]]; then man_name="PUYA"; fi
             if [[ $man_code == *"id: 9d"* ]]; then man_name="ISSI"; fi
             if [[ $man_code == *"id: a1"* ]]; then man_name="Fudan"; fi
             if [[ $man_code == *"id: ba"* ]]; then man_name="Zetta"; fi
             if [[ $man_code == *"id: c2"* ]]; then man_name="MXIC (Macronix)"; fi
             if [[ $man_code == *"id: c8"* ]]; then man_name="GigaDevice"; fi
             if [[ $man_code == *"id: e0"* ]]; then man_name="PARAGON"; fi
             if [[ $man_code == *"id: ef"* ]]; then man_name="Winbond"; fi   
             if [[ $man_code == *"id: f8"* ]]; then man_name="Fidelix"; fi   
          else  manufacture="$MANUFACTURER_NOT_FOUND"
       fi;
       manufacture="${manufacture}<b>${man_name}</b>"
       info=$(echo "$info" | grep 'Flash:')
       rufirst="$CHIP_FOUND "
       rusecond="$VOLUME "
       ruvcc="$SUPPLY_VOLT"
       dev_vcc=${dev_vcc/'VCC:'/"$ruvcc <b>"}
       ruinfo=${info/'Detected '/"\n$rufirst"}
       ruinfo=${ruinfo/'Flash Size:'/"\n$rusecond"}
       ruinfo=${ruinfo/'[93m'/"<b>"}
       ruinfo=${ruinfo/'[93m'/"<b>"}
       ruinfo=${ruinfo/'[0m'/"</b>"}
       ruinfo=${ruinfo/'[0m'/"</b>"}
       ruinfo="${ruinfo} \n${manufacture}\n${dev_vcc}</b>"   
     fi
     action_type=$(zenity --height=340 --width=320 --list --radiolist --text \
"$CHOOSE_ACTION" --column="Set" --column="$ACTION"\
 TRUE "$COUNT"\
 FALSE "$WRITE"\
 FALSE "$WRITE_VERIFY"\
 FALSE "$ERASE" )
     if [[ "$action_type" == "$WRITE_VERIFY" ]] ; then mode="-v"; else mode=""; fi
     if [[ "$action_type" == "$COUNT" ]]
     then
     zenity --warning --width=320 \
--text="$SELECT_DIR_TO_FILE"
     filepath=$(zenity --file-selection --directory)
     filename=$(zenity --entry \
--title="$ENTER_FILENAME" \
--text="$FILENAME_TO_SAVE" \
--entry-text "eeprom.bin")
        if [ -n "$eeprom_model" ]
        then        
        SNANDer -E$eeprom_model -r $filepath/$filename | tee >(zenity --width=200 --height=100 \
  				    --title="$READING" --progress \
			            --pulsate --text="$PROCESS_WAIT" \
                                    --no-cancel --auto-close \
                                    --percentage=10)
        else
        SNANDer -r $filepath/$filename | tee >(zenity --width=320 --height=100 \
  				    --title="$READING" --progress \
			            --pulsate --text="$ruinfo\n\n$PROCESS_WAIT" \
                                    --no-cancel --auto-close \
                                    --percentage=10)
        fi
     fi
     if [ "$action_type" == "$WRITE" ] || [ "$action_type" == "$WRITE_VERIFY" ]
     then
     zenity --warning \
--text="$SELECT_FILE_TO_WRITE"
     filename=$(zenity --file-selection)     
        if [ -n "$eeprom_model" ]
        then
        SNANDer -E$eeprom_model -w $filename $mode| tee >(zenity --width=200 --height=100 \
  				    --title="$REC" --progress \
			            --pulsate --text="$PROCESS_WAIT" \
                                    --no-cancel --auto-close \
                                    --percentage=10)
        else
        SNANDer -w $filename  $mode| tee >(zenity --width=320 --height=100 \
  				    --title="$REC" --progress \
			            --pulsate --text="$ruinfo\n\n$PROCESS_WAIT" \
                                    --no-cancel --auto-close \
                                    --percentage=10)
        fi
     fi
     if [[ "$action_type" == "$ERASE" ]]
     then   
        if [ -n "$eeprom_model" ]
        then
        SNANDer -E$eeprom_model -e | tee >(zenity --width=200 --height=100 \
  				    --title="$ERASING" --progress \
			            --pulsate --text="$PROCESS_WAIT" \
                                    --no-cancel --auto-close \
                                    --percentage=10)
        else
        SNANDer -e | tee >(zenity --width=320 --height=100 \
  				    --title="$ERASING" --progress \
			            --pulsate --text="$ruinfo\n\n$PROCESS_WAIT" \
                                    --no-cancel --auto-close \
                                    --percentage=10)
        fi
     fi
     zenity --warning \
--text="$READY" \
--icon-name='applications-electronics'
 else 
 echo "$CHIP_NOT_SELECTED"
 zenity --error \
--text="$CHIP_NOT_SELECTED"
 fi
 else
 zenity --error \
--text="${NOT_CONNECTED}"
 fi

