# Meiglink modems

function modem_data(){
	generic_data
	# hwinfo
	OIFS="$IFS"; IFS="|"
	set -- $(echo "$O" | awk '
	/^\+CGMI:/ {manuf = $2" "$3}; /^\+CGMM:/ {model = $2}; /^\+CGMR:/ {fw = $2}; /^\+TEMP:.*cpuss-usr/ {gsub("\"",""); split($2,t,","); temp = t[2]}
        /^[0-9]{15}$/ {
            if (!imsi) imsi = $0; else if (!imei) imei = $0
        } /^ICCID:/ { iccid = $2; sub(/\r$/, "", iccid)
        } END { print manuf "|" model "|" fw "|" imsi "|" imei "|" iccid "|" temp } ')
	DEVICE="${1} ${2}"; FW=${3}; IMSI=${4}; IMEI=${5}; ICCID=${6}; CHIPTEMP=${7}
	IFS="$OIFS"; unset OIFS

	# signal info
	OIFS="$IFS"; IFS="|"
	 
	set -- $(echo "$O" | awk -F'[\,]' '
		/^\$QCSQ/ {split(substr($0, index($0,":")+1), a, ","); qcsq = a[1]; ecio = $2}
		/^\+CSQ:/ {split($1,b,":\ "); csq = b[2]}
		/^\^CELLINFO:/ {
			split($1, p, ":"); mode = p[2]
			if (mode == "LTE") {
				lte_ca++
				lac_h = sprintf("%X", $9); cid_h = sprintf("%X", $5); sinr = sprintf("%.0f", $17/5 - 20)
				rfcn = $12; rssi = $14; rsrp = $15; rsrq = $16; pci = $6; bw = ($11==15 ? 3 : $11/5)
				bwc_map[20] = 5; bwc_map[15] = 4; bwc_map[10] = 3; bwc_map[5] = 2; bwc_map[1.3] = 1
				bwc = bwc_map[bw]
				print mode "|" rfcn "|" lac_h "|" cid_h "|" rssi "|" sinr "|" rsrp "|" rsrq "|" \
					pci "|" bw "|" bwc "|" qcsq "|" csq "|" lte_ca
			} else if (mode ~ /WCDMA|UMTS/) {
				lac_h = sprintf("%X", $6); cid_h = sprintf("%X", $7)
				rfcn = $9; rssi = qcsq; sinr = ecio
				print mode "|" rfcn "|" lac_h "|" cid_h "|" rssi "|" sinr
			} else {
				lac_h = sprintf("%X", $6); cid_h = sprintf("%X", $7)
				rfcn = $9; rssi = qcsq
				print mode "|" rfcn "|" lac_h "|" cid_h "|" rssi
			}
			exit
		} END {if (!mode) print "NO_CARRIER"}') 
	
	MODE="${1}" EARFCN=${2}; LAC=${3}; CID=${4}; CSQ_RSSI=${5}
	IFS="$OIFS"; unset OIFS
	case $MODE in
		*LTE*)
			SINR=${6}; RSRP=${7}; RSRQ=${8}; PCI=${9}; BWC=${10}; BWDL=${11}; LTE_CA=${14}
			CELL=$(printf %d 0x${CID: -2})
			ENBx=$(echo $CID | awk '{print $1}' | sed -e 's/..$//' )
			ENBID=$(printf %d 0x$ENBx)
			LTE_CA=$(echo "$O" | awk '/\^CELLINFO: / {print $0}' | wc -l)
			if [ $LTE_CA -gt 0 ]; then
				LTE_CA=1; OIFS="$IFS"; IFS="|"
				set -- $(echo "$O" | awk -v bwdl=${BWC:-0} -F [,] '
					/CELLINFO: "SCC"/{bands = bands "+" $7; sum+=$6/5; bwca=sum+bwdl}
					END{print bands "|" bwca}
				')
				BWCA=${2}; SCC=${1}
				IFS="$OIFS"; unset OIFS BWC
			fi
		;;
		WCDMA|UMTS) SINR=${6} ;;
	esac
	unset OIFS
	if [ $(uci -q get modeminfo.@general[0].decimail) = "1" ] ; then
		LAC=$(printf "%d" 0x${LAC})
		CID=$(printf "%d" 0x${CID})
	fi
}
