#!/bin/sh

chip=$(ipcinfo -c)
family=$(ipcinfo -f)
vendor=$(ipcinfo -v)
sensor=$(ipcinfo -s)
prefix=${family}

hisi_goke() {
  if [ ${vendor} = "hisilicon" ]; then
	prefix="open"
  fi
  # remove unneeded modules
  sed -i "s!insmod ${prefix}_rgn.ko!#insmod ${prefix}_rgn.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_jpege.ko!#insmod ${prefix}_jpege.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_ive.ko save_power=0!#insmod ${prefix}_ive.ko save_power=0!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_aio.ko!#insmod ${prefix}_aio.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_ai.ko!#insmod ${prefix}_ai.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_ao.ko!#insmod ${prefix}_ao.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_aenc.ko!#insmod ${prefix}_aenc.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_adec.ko!#insmod ${prefix}_adec.ko!g" /usr/bin/load_${vendor}
  sed -i "s!insmod ${prefix}_acodec.ko!#insmod ${prefix}_acodec.ko!g" /usr/bin/load_${vendor}
  # change fps 25 -> 30
  sed -i "s!Isp_FrameRate=25!Isp_FrameRate=30!g" /etc/sensors/imx307_i2c_2l_1080p.ini
  sed -i "s!Isp_FrameRate=25!Isp_FrameRate=30!g" /etc/sensors/smtsec_imx307_i2c_4l_1080p.ini
}

all_other() {
  # don't load f2fs module (disabled in kernel)
  sed -i "s!f2fs!#f2fs!g" /etc/modules
  # disable mavlink routerd autostart
  sed -i "s!/usr/bin/mavlink-routerd &!#/usr/bin/mavlink-routerd &!g" /etc/init.d/S97mavlink
  # majestic basic settings
  cli -s .isp.slowShutter disabled
  cli -s .isp.drc 350
  # enable digital image stabilization 
  # cli -s .isp.dis true
  cli -s .image.contrast 50
  cli -s .image.luminance 50
  cli -s .video0.bitrate 4096
  cli -s .video0.codec h264
  cli -s .video0.rcMode cbr
  cli -s .video0.gopSize 0.2
  cli -s .hls.enabled false
  cli -s .netip.enabled false
  cli -s .jpeg.enabled false
  # lowdelay support only imx307 sensor
  if [ ${sensor} = "imx307" ]; then
	  cli -s .video0.size 1280x720
	  # cli -s .video0.fps 30
	  cli -s .isp.lowDelay true
	  # cli -s .video0.sliceUnits 4
  fi
# tune socket buffer
cat >> /etc/sysctl.conf << EOF
net.core.rmem_default=524288
net.core.rmem_max=2048000
EOF
# add outgoing rtp stream to udp
cat >> /etc/majestic.yaml << EOF
outgoing:
  - udp://127.0.0.1:5600
EOF
  # complete tweaks
  touch /etc/system.ok
  echo "Preparing system done."
  reboot
}

case "$1" in
  gk7205v200 | hi3516ev200)
	echo "Preparing system tweaks for ${chip}..."

	# set custom config
	if [ ${chip} = "gk7205v200" ] && [ ${sensor} = "imx307" ]; then
	  echo "switch to custom sensor config"
	  # cli -s .isp.sensorConfig /etc/sensors/60fps/720p_imx307_i2c_2l.ini
	fi

	# fix osmem in bootargs
	bootargs=$(fw_printenv -n bootargs)
	if echo ${bootargs} | grep -q "32M"; then
	  newbootargs="mem=\${osmem} "$(echo ${bootargs} | cut -d " " -f2-)
	  fw_setenv bootargs ${newbootargs}
	  fw_setenv osmem 40M
	fi

	sed -i "s!console::respawn:/sbin/getty -L  console 0 vt100 # GENERIC_SERIAL!#console::respawn:/sbin/getty -L  console 0 vt100 # GENERIC_SERIAL!g" /etc/inittab

	# remove unneeded to reduce some memory
	rm -f /etc/init.d/S60crond /etc/init.d/S49ntpd /etc/init.d/S02klogd

	hisi_goke
	all_other
	;;
  gk7205v300 | hi3516ev300)
	echo "Preparing system tweaks for ${chip}..."

	# increase osmem
	mem=$(fw_printenv -n osmem) && [ "${mem}" = "32M" ] && fw_setenv osmem 64M && set_allocator cma || echo "Memory allocated for the system:" ${mem}

	# set sensor config for smtsec board
	if [ ${chip} = "gk7205v300" ] && [ ${sensor} = "imx307" ]; then
		cli -s .isp.sensorConfig /etc/sensors/smtsec_imx307_i2c_4l_1080p.ini
	fi

	hisi_goke
	all_other
	;;
  t31l | t31n | t31x | t31zx)
	echo "Preparing system tweaks for ${chip}..."

	all_other
	;;
	*)
	echo "Usage: $0 {gk7205v200|gk7205v300|hi3516ev200|hi3516ev300|t31l|t31n|t31x|t31zx}"
	exit 1
esac