#!/bin/sh
#
# This is part of OpenIPC.org project | 2020.08.01
#
# ar0237 imx290 imx307 imx323 imx385 jxf22 ov2718 ov2718_2a sc2235


# SoC detect
chipid=$(ipcinfo --chip_id)

# MMZ config
mem_start=0x80000000;                             # phy mem start

mem_total=$(fw_printenv -n totalmem | tr -d 'M')
mem_total=${mem_total:=64}

os_mem_size=$(fw_printenv -n osmem | tr -d 'M')
os_mem_size=${os_mem_size:=32}

report_error()
{
        echo "******* Error: There's something wrong, please check! *****"
        exit 1
}

insert_mmz()
{
}

insert_detect()
{
        insert_mmz
        insert_isp
        SENSOR=ar0130 insert_sns
}

remove_detect()
{
}

remove_sns()
{
        rmmod -w sensor_spi &> /dev/null
        rmmod -w sensor_i2c &> /dev/null
}

insert_isp()
{
}

insert_sns()
{
}

insert_ko()
{
	find . -maxdepth 1 -type f -name "sensor_*.ko" -exec insmod {} \;
	insmod akcamera.ko
}

remove_ko()
{
}

calc_mmz_info()
{
        mmz_start=`echo "$mem_start $os_mem_size" | 
        awk 'BEGIN { temp = 0; }
        {
                temp = $1/1024/1024 + $2;
        } 
        END { printf("0x%x00000\n", temp); }'`

        mmz_size=`echo "$mem_total $os_mem_size" | 
        awk 'BEGIN { temp = 0; }
        {
                temp = $1 - $2;
        } 
        END { printf("%dM\n", temp); }'`
        echo "mmz_start: $mmz_start, mmz_size: $mmz_size"
}


######################parse arg###################################
b_arg_os_mem=0
b_arg_total_mem=0
b_arg_sensor=0
b_arg_insmod=0
b_arg_remove=0
b_arg_online=1

for arg in $@
do
        if [ $b_arg_total_mem -eq 1 ]; then
                b_arg_total_mem=0;
                mem_total=$arg;

                if [ -z $mem_total ]; then
                        echo "[error] mem_total is null"
                        exit;
                fi
        fi

        if [ $b_arg_os_mem -eq 1 ] ; then
                b_arg_os_mem=0;
                os_mem_size=$arg;

                if [ -z $os_mem_size ]; then
                        echo "[error] os_mem_size is null"
                        exit;
                fi
        fi

        if [ $b_arg_sensor -eq 1 ] ; then
                b_arg_sensor=0
                SENSOR=$arg;
        fi

        case $arg in
                "-i")
                        b_arg_insmod=1;
                        ;;
                "-r")
                        b_arg_remove=1;
                        ;;
                "-a")
                        b_arg_insmod=1;
                        b_arg_remove=1;
                        ;;
                "-h")
                        load_usage;
                        ;;
                "-sensor")
                        b_arg_sensor=1;
                        ;;
                "-osmem")
                        b_arg_os_mem=1;
                        ;;
                "-total")
                        b_arg_total_mem=1;
                        ;;
                "-offline")
                        b_arg_online=0;
                        ;;
        esac
done
#######################parse arg end########################

if [ $os_mem_size -ge $mem_total ] ; then
        echo "[err] os_mem[$os_mem_size], over total_mem[$mem_total]"
        exit;
fi

calc_mmz_info;

#######################Action###############################

if [ $# -lt 1 ]; then
    load_usage;
    exit 0;
fi

# Sensor config
# SENSOR=${SENSOR:=imx307}
#

if [ -n "$SENSOR" ]; then
        logger -s -p daemon.info -t anyka "Manualy set SENSOR as ${SENSOR}"
else
        if fw_printenv -n sensor >/dev/null; then
                SENSOR_ENV=$(fw_printenv -n sensor)
                export SENSOR=${SENSOR_ENV}
                logger -s -p daemon.info -t anyka "Get data from environment and set SENSOR as ${SENSOR}"
        else
                #insert_detect
                SENSOR_DETECT=$(ipcinfo --short-sensor)
                export SENSOR=${SENSOR_DETECT:=unknown}
                #remove_detect
                logger -s -p daemon.info -t anyka "Get data from ipcinfo and set SENSOR as ${SENSOR}"
                fw_setenv sensor $SENSOR && logger -s -p daemon.info -t anyka "Write detected ${SENSOR} to U-Boot ENV"
        fi
fi

if [ $b_arg_remove -eq 1 ]; then
        remove_ko;
fi

cd /lib/modules/3.4.35/anyka

if [ "$SENSOR" = "unknown" ]; then
        exit 1
else
        if [ $b_arg_insmod -eq 1 ]; then
                insert_ko;
        fi
fi