#!/bin/bash
	
	############################################################
	############################################################
	############################################################
	# Project : RpiOptimisation.sh  
	# Version : 
	# Dependency / Dependencies : /
	# Language : bash
	# License : GNU GPL - http://www.gnu.org/licenses/gpl.html
	# Author : Hilger Sébastien
	# Contact : hilger.sebastien@gmail.com
	############################################################
	############################################################
	############################################################
	
	# PROGRAM VARIABLES ########################################

	green='\e[1;32m'
	yellow='\e[1;33m'
	red='\e[1;31m'
	nocolor='\e[0;m'
	
	
	# FUNCTION / FUNCTIONS #####################################
	
	Help(){
echo -e "
RpiOptimisation.sh : Performance optimization tool for Raspberry Pi (CPU,GPU,SD card read and write speed) by model.

${green}[To apply the new configuration, restart required]${nocolor}
	
Parameter :
		
--rpi0 : Raspberry Pi 0.
		
--rpi1 : Raspberry Pi 1.
	
--rpi2 : Raspberry Pi 2.
	
--rpi3 : Raspberry Pi 3.

--restore : Restoration of the original configuration if modified by RpiOptimization.
		
	Examples:
		
	RpiOptimisation.sh --rpi0
	RpiOptimisation.sh --rpi1
	RpiOptimisation.sh --rpi2
	RpiOptimisation.sh --rpi3
	RpiOptimisation.sh --restore		
"
	}
	
	saveConfig(){
		cp /boot/config.txt /boot/old.config.txt
	}	

	overClockRpi0(){
echo "
arm_freq=1000
gpu_freq=500
core_freq=500
sdram_freq=500
sdram_schmoo=0x02000020
over_voltage=6 (default)
sdram_over_voltage=2
" >> /boot/config.txt
	}

	overClockRpi1(){
echo "
arm_freq=900
gpu_freq=400
core_freq=400
sdram_freq=400
sdram_schmoo=0x02000020
over_voltage=2
sdram_over_voltage=2
" >> /boot/config.txt
	}

	overClockRpi2(){
echo "
total_mem=1024
arm_freq=1000
gpu_freq=500
core_freq=500
sdram_freq=500
sdram_schmoo=0x02000020
over_voltage=2
sdram_over_voltage=2
" >> /boot/config.txt
	}

	overClockRpi3(){
echo "
total_mem=1024
arm_freq=1300
gpu_freq=500
core_freq=500
sdram_freq=500
sdram_schmoo=0x02000020
over_voltage=2
sdram_over_voltage=2
" >> /boot/config.txt
	}

	overClockSdCard(){
		echo "dtparam=sd_overclock=100" >> /boot/config.txt
	}
	
	# BODY #####################################################
	
	if [ `whoami` = 'root' ]; then
		if [ -z "$1" ] || [ -z "$1" ] || [ "$1" = "--help" ] || [ "$1" = "--Help" ] || [ "$1" = "--HELP" ] || [ "$1" = "-h" ] || [ "$1" = "-H" ]; then
			Help
		else
			if [ ! -e /boot/old.config.txt ]; then
				saveConfig
			fi
			
			if [ "$1" = "--rpi0" ] || [ "$1" = "--rpi1" ] || [ "$1" = "--rpi2" ] || [ "$1" = "--rpi3" ] ; then
				echo " " >> /boot/config.txt
				echo "########## RpiOptimisation Configuration ##########" >> /boot/config.txt
				if [ "$1" = "--rpi0" ]; then
					overClockRpi0
					overClockSdCard
				elif [ "$1" = "--rpi1" ]; then
					overClockRpi1
					overClockSdCard
				elif [ "$1" = "--rpi2" ]; then
					overClockRpi2
					overClockSdCard
				elif [ "$1" = "--rpi3" ]; then
					overClockRpi3
					overClockSdCard
				fi
				echo " " >> /boot/config.txt
				echo "####### End RpiOptimisation Configuration ##########" >> /boot/config.txt
				echo -e "${green}"
				cat /boot/config.txt | less
				echo -e "${green}[New configuration : OK]${nocolor}"
				sleep 2
				echo -e "${nocolor}"
				echo -e "${red}Restart required to apply new configuration.${nocolor}"
			elif [ "$1" = "--restore" ]; then
				echo -e "${yellow}[Restoration of the original configuration if modified by RpiOptimization]${nocolor}"
				cp -v /boot/old.config.txt /boot/config.txt && echo -e "${green}Restoration : OK${nocolor}" || echo -e "${yellow}No old configuration  available.${nocolor}"
			else
				echo " "
				echo -e "${red}Error parameter${nocolor}" && Help
			fi
		fi
						
	else
		echo "Root privileges are required."
		echo "Use before : su root -p"
	fi

	
