#!/bin/sh /etc/rc.common
START=99

boot() {
	#ceate folder
	[ -d /tmp/modbus_data/ ] || mkdir /tmp/modbus_data/

	stop

	if  [[ ! `ls /etc/MODBUS_Configuration.csv` ]] || [[ "`ls -l /etc/MODBUS_Configuration.csv  | awk '{print$5}'`" == 0 ]]; then exit ; fi;

	#start modbus app without deleting Database
	if [ "`uci get modbus_master.mm.enable 2>/dev/null`" == 1 ]; then
		echo -e "0020,`date +%Y%m%d%H%M%S`,\r" >> /etc/MODBUS_ECO_Err_Events.csv
		##sim card detection
		imsi=`sendat /dev/ttyACM0 AT+CIMI 1 | grep -v [a-zA-Z] | grep [0-9]`
		if [ `expr length "$imsi"` -lt 15 ]; then
			echo -e "2003,`date +%Y%m%d%H%M%S`,\r" >> /etc/MODBUS_ECO_Err_Events.csv
		fi
		#kill serial app
		kill_serial
		database_size=`uci get modbus_master.mm.database_size 2>/dev/null`
		if [ $database_size ]; then
			/usr/bin/modbusmaster -W -S $database_size &> /dev/null &
		else
			/usr/bin/modbusmaster -W &> /dev/null &
		fi
	fi
}

start() {
	#kill serial app
	kill_serial
	#start modbus app
	if [ "$1" == "default_config_file" ]; then
		touch /etc/config_file_upload_flag	2>/dev/null
		database_size=`uci get modbus_master.mm.database_size 2>/dev/null`
		if [ $database_size ]; then
			/usr/bin/modbusmaster -P -A 1 -S $database_size &> /dev/null &
		else
			/usr/bin/modbusmaster -P -A 1 &> /dev/null &
		fi
	else
		rm -r /etc/config_file_upload_flag	2>/dev/null
		database_size=`uci get modbus_master.mm.database_size 2>/dev/null`
		if [ $database_size ]; then
			/usr/bin/modbusmaster -P -A 0 -S $database_size &> /dev/null &
		else
			/usr/bin/modbusmaster -P -A 0 &> /dev/null &
		fi
	fi
        ##/usr/bin/modbusmaster -P &> /dev/null &
    }

stop() {
    killall -9 modbusmaster 2>/dev/null
    rm -rf /tmp/modbus_tcp_stats.txt 2>/dev/null
    return 0
}
reload() {
	#ceate folder
	[ -d /tmp/modbus_data/ ] || mkdir /tmp/modbus_data/
	stop
	#kill serial app
	if [ "`uci get modbus_master.mm.enable 2>/dev/null`" == 1 ]; then
		kill_serial
		#start modbus app without deleting Database
		database_size=`uci get modbus_master.mm.database_size 2>/dev/null`
		if [ $database_size ]; then
			/usr/bin/modbusmaster -W -S $database_size &> /dev/null &
		else
			/usr/bin/modbusmaster -W &> /dev/null &
		fi
	fi
}
restart() {
	#ceate folder
	[ -d /tmp/modbus_data/ ] || mkdir /tmp/modbus_data/

	if [ "$1" == "reconfiguration_and_restart" ]; then
		stop
		echo -e "0035,`date +%Y%m%d%H%M%S`,\r" >> /etc/MODBUS_ECO_Err_Events.csv
		start "default_config_file"
	else
		stop
		file_name=`uci get modbus_master.mm.config_file 2>/dev/null`
		state=`uci get modbus_master.mm.enable 2>/dev/null`
		if [[ ! -f "$file_name" ]] && [[ $state == 1 ]]
		then
			echo "ERROR: Configuration file not present"
			echo "ERROR: Configuration file not present" >> /tmp/luci_message_modmaster
		elif [[ ! -s "$file_name" ]] && [[ $state == 1 ]]
		then
			echo "ERROR: Empty configuration file"
			echo "ERROR: Empty configuration file" >> /tmp/luci_message_modmaster
		fi
		if [[ -s "$file_name" ]]
		then
			modbusmaster -T "$file_name" > /dev/null 2>&1
			output=$?
			if [[ "$output" -eq "1" ]]
			then
				echo "ERROR: Invalid configuration file"
				echo "ERROR: RTU/TCP - Invalid configuration file" >> /tmp/luci_message_modmaster
			elif [[ "$output" -eq "2" ]]
			then
				echo "ERROR: Invalid configuration file"
				echo "ERROR: TCP - Invalid configuration file" >> /tmp/luci_message_modmaster
			fi
		fi

		if [[ "`uci get modbus_master.mm.interface`" == "none" ]] && [[ "`uci get serial1.Line.mode`" == "modmaster" ]]
		then
			exit
		fi
		if [[ "`uci get modbus_master.mm.interface`" == "none" ]] && [[ "`uci get serial.Line.mode`" == "modmaster" ]]
		then
			exit
		fi
		if [[ "`uci get modbus_master.mm.interface`" == "/dev/ttyS3" ]] && [[ "`uci get serial.Line.mode`" != "modmaster" ]]
		then
			if [[ $state == 1 ]]
			then
				echo "ERROR: Configure mode as modbusmaster in serial 1 page"
				echo "WARNING: Serial 1 Mode is not Modbus Master" >> /tmp/luci_message_modmaster
			fi
			exit
		fi
		if [[ "`uci get modbus_master.mm.interface`" == "/dev/ttyS6" ]] && [[ "`uci get serial1.Line.mode`" != "modmaster" ]]
		then
			if [[ $state == 1 ]]
			then
				echo "ERROR: Configure mode as modbusmaster in serial 2 page"
				echo "WARNING: Serial 2 Mode is not Modbus Master" >> /tmp/luci_message_modmaster
			fi
			exit
		fi
		#start modbus app
		if [ "`uci get modbus_master.mm.enable 2>/dev/null`" == 1 ]; then
			##delete previous config file
			rm /etc/MODBUS_Configuration.csv 2>/dev/null
			#rm /etc/Eco_axis_MODBUS_Configuration.csv
			rm /etc/MODBUS_ECO_Err_Events* 2>/dev/null
			rm /etc/MODBUS_fargo_Err_Events.csv 2>/dev/null
			rm /tmp/modbus_data/modbus_status 2>/dev/null
			#copy config file
			cp "`uci get modbus_master.mm.config_file`" /etc/MODBUS_Configuration.csv 2>/dev/null
			#echo 'Starting Configuration file Conversion.........' > /tmp/modbus_data/modbus_status
			##convert Eco Axis file into fargo config file
			#/usr/sbin/Eco_fargo_converter.sh /etc/Eco_axis_MODBUS_Configuration.csv /etc/MODBUS_Configuration.csv
			if  [[ ! `ls /etc/MODBUS_Configuration.csv` ]] || [[ "`ls -l /etc/MODBUS_Configuration.csv  | awk '{print$5}'`" == 0 ]];
			then
				echo 'ERROR:Configuration File Not Found' >> /tmp/luci_message_modmaster
				exit
			fi
			#echo 'Configuration file Conversion completed' > /tmp/modbus_data/modbus_status

			echo -e "0034,`date +%Y%m%d%H%M%S`,\r" >> /etc/MODBUS_ECO_Err_Events.csv
			echo -e "0035,`date +%Y%m%d%H%M%S`,\r" >> /etc/MODBUS_ECO_Err_Events.csv
			start "default_config_file"
		else
			##delete previous config file
			rm /etc/MODBUS_Configuration.csv 2>/dev/null
			#rm "`uci get modbus_master.mm.config_file`" 2>/dev/null
			#rm /etc/Eco_axis_MODBUS_Configuration.csv
			rm /tmp/modbus_data/modbus_status 2>/dev/null
			db_delete
		fi
	fi	
}
db_delete() {
	#Delete Existing database
	/usr/bin/modbusmaster -D &> /dev/null &
}
# kill the serial application that used serial port
kill_serial() {
	check_serial=`ps | grep -i serial | grep -v grep | awk '{print $1}'`
	if [ "$check_serial" != "" ]; then
		if [[ "`uci get modbus_master.mm.interface`" == "/dev/ttyS3" ]]
		then
			logger "in kill serial one"
			#ps | egrep -i "serial /dev/ttyS3" | grep -v grep | awk '{print $1}' | xargs kill -9
			# Disable serial application
			serial_enable=`uci get serial.@datasendconfiguration[0].serial_enable`
			if [ $serial_enable == 1 ]; then
				uci set serial.@datasendconfiguration[0].serial_enable=0
				uci commit
			fi
		fi

		if [[ "`uci get modbus_master.mm.interface`" == "/dev/ttyS6" ]]
		then
			logger "in kill serial two"
			ps | egrep -i "serial /dev/ttyS6" | grep -v grep | awk '{print $1}' | xargs kill -9
			# Disable serial application
			serial_enable=`uci get serial1.@datasendconfiguration[0].serial_enable`
			if [ $serial_enable == 1 ]; then
				uci set serial1.@datasendconfiguration[0].serial_enable=0
				uci commit
			fi
		fi
	fi
}
reconfiguration_and_restart() {
	start
}
