# SimCom SIM7600E-H
modem_data(){
	# get hardware info

	set -- $(echo "$O" | awk -v fam="$FAMILY" '
		BEGIN {cnt=0; OFS="\n"}
		$0 ~ fam {cnt++; if(cnt==1) manuf=$0; if(cnt==2) model=$0}
		/^\+CGMR:/ {split($0,a,":"); fw=a[2]; getline; if($0~/^[0-9]{15}$/) imsi=$0}
		/^\+ICCID:/ {split($0,a,":"); iccid=a[2]; getline; if($0~/^[0-9]{15}$/) imei=$0}
		/^\+CPMUTEMP/ {split($0,a," "); temp=a[2]}
		/^\+CNSMOD/ {split($0, a, "[, ]"); tech = a[3]
		modes[1] = "GSM"; modes[2] = "GPRS"; modes[3] = "EDGE";	modes[4] = "UMTS"; modes[5] = "HSDPA"
		modes[6] = "HSUPA"; modes[7] = "HSPA"; modes[8] = "LTE"
		tech_first = substr(tech, 1, 1)
		mode = (tech_first in modes) ? modes[tech_first] : "--" }
		END {print manuf, model, fw, iccid, imsi, imei, temp, tech, mode}')

	DEVICE="${1} ${2} ${3}"; FW="${4}"; ICCID="${5}"; IMSI="${6}"; IMEI="${7}"; CHIPTEMP=${8}; TECH=${9}; MODE="${10}"

	# get signal info
	set -- $(echo "$O" | awk -F[,\ ] -v tech="$TECH" '
		/^\+CPSI:/ && tech ~ /^8/ { # LTE Mode
		earfcn = $9; csq_rssi = sprintf("%.0f", $14/10)
		rsrp = sprintf("%.0f", $13/10)
		rsrq = sprintf("%.0f", $12/10)
		sinr = sprintf("%.0f", ($15*2)-20)
		pci = $7; bwdl = $10; bwul = $11
		} /^\+CPSI:/ && tech ~ /^[4-7]/ { # 3G Mode
		earfcn = $8; sinr = sprintf("%.0f", (-$10 < -24) ? -24 : (-$10 > 0) ? 0 : -$10)
		} /^\+CPSI:/ && tech ~ /^[1-3]/ { # 2G Mode
		earfcn = $7
		} /^\+CEREG:/ && tech ~ /^[4-8]/ { # LTE/3G Mode
		lac = $4; cid = $5
		} /^\+CREG:/ && tech ~ /^[1-3]/ { # 2G Mode
		lac = $3; cid = $4
		} END {print earfcn, lac, cid, csq_rssi, sinr, rsrp, rsrq, pci, bwdl, bwul}')
	EARFCN=${1}; LAC=${2}; CID=${3}; CSQ_RSSI=${4}
	case "$TECH" in 
		8*)
			SINR=${5}; RSRP=${6}; RSRQ=${7}; PCI=${8}; BWDL=${9}
			ENBx=$(echo $CID | sed -e 's/..$//')
			CELL=$(printf %d 0x${CID: -2})
			ENBID=$(printf %d 0x$ENBx)
			LTE_CA=$(echo "$O" | grep -i CA_Scell | wc -l)
                        if [ $LTE_CA -gt 0 ]; then
				LTE_CA=1
				SCC=$(echo "$O" | awk -F'[,]' -v mode="$MODE" '
					/CA_Scell/ && $3 > 1 {
					cmd = "/usr/share/modeminfo/scripts/ch_to_band " mode " " $3
					cmd | getline band
					close(cmd)
					printf "%s%s", (++n?"+":""), band }')

				BWCA=$(echo "$O" | awk -F '[:,]' -v bwdl="$BWDL" '
					BEGIN { ca_count = 0; bwca = 0
					# Convert value to bandwith
					bw_conv[1] = 3; bw_conv[2] = 5; bw_conv[3] = 10; bw_conv[4] = 15; bw_conv[5] = 20
					main_bw = (bwdl in bw_conv) ? bw_conv[bwdl] : 0
					} /CA_Scell/ { ca_count++; bw = $6
					if (bw in bw_conv) {
					bwca += bw_conv[bw] }
					} END {	has_ca = (ca_count > 0) ? 1 : 0; total_bw = has_ca ? (bwca + main_bw) : 0
					print has_ca, total_bw }')
			fi
		;;
		4*|5*|6*|7*) SINR=${5} ;;
	esac
        LAC_NUM=$(printf %d 0x$LAC)
        CID_NUM=$(printf %d 0x$CID)
	if [ $(uci -q get modeminfo.@general[0].decimail) = "1" ]; then
		LAC=$LAC_NUM
		CID=$CID_NUM
	fi

}
