# Huawei modems
function modem_data(){
	if [ -n "$O" ]; then
		MANUF=$(echo "$O" | grep -i $FAMILY)
		MODEL=$(echo "$O" | awk -F'INTU:' '/\^VERSION:INTU:/ {print $2}')
		if [ -z "$MODEL" ]; then
			MODEL=$(echo "$O" | grep -A1 -i $FAMILY | tail -1)
		fi
		DEVICE=$(echo "$MANUF $MODEL" | tr 'a-z' 'A-Z')
		echo "$DEVICE" | grep -qi e392 && [ -e /dev/cdc-wdm0 ] && MDM=1
		FW=$(echo "$O" | awk -F'"' 'toupper($0) ~ /\^FHVER:/ {print $2}' | sed 's/,\([^ ]\)/, \1/g')
		if [ -z "$FW" ]; then
			FW=$(echo "$O" | grep -A2 -i "$FAMILY" | tail -1 | sed 's/[[:space:]\r]//g')
		fi
		ICCID=$(echo "$O" | awk '/ICCID/{print $2}' | sed 's/[a-zA-Z]//g' | tr -d '"')
		IMSI=$(echo "$O" | grep -A1 -i ICCID | tail -1)
		IMEI=$(echo "$O" | grep -A2 -i ICCID | tail -1)
		LAC=$(echo "$O" | awk -F[,\ ] '/^\+CGREG/{gsub("\"","");print $4}' | sed 's/[[:space:]\r]//g')
		CID=$(echo "$O" | awk -F[,\ ] '/^\+CGREG/{gsub("\"","");print $5}' | sed 's/[[:space:]\r]//g')
		LAC_NUM=$(printf %d 0x$LAC)
		CID_NUM=$(printf %d 0x$CID)
		PLMN_RAW=$(echo "$O" | awk -F'APHPLMN:' '/\^APHPLMN:/ {print $2}' | tr -d '\r\n[:space:]')
		if [ -z "$PLMN_RAW" ]; then
			PLMN_RAW=$(echo "$O" | awk -F'"' '/^\+COPS:/{print $2}' | grep -E '^[0-9]+$' | tail -1)
		fi
		MCC=${PLMN_RAW:0:3}
		MNC=${PLMN_RAW:3}
		PLMN=$(printf "%s%03d" "$MCC" "$MNC")
		# Huawei any modern models
		TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFOEX/ {print $9}' | sed 's/"//g')
		if [ "x$TECH" != "x" ]; then
			MODE=$(echo "$TECH" | sed 's/-//g' | sed 's/[[:space:]\r]//g')
		fi
		# Huawei and older models
		if [ "x$MODE" = "x-" ] || [ "x$TECH" = "x" ]; then
			TECH=$(echo "$O" | awk -F[,] '/^\^SYSINFO/ {print $7}')
			case $TECH in
				17*) MODE="HSPA+ (64QAM)";;
				18*) MODE="HSPA+ (MIMO)";;
				1*) MODE="GSM";;
				2*) MODE="GPRS";;
				3*) MODE="EDGE";;
				4*) MODE="UMTS";;
				5*) MODE="HSDPA";;
				6*) MODE="HSUPA";;
				7*) MODE="HSPA";;
				9*) MODE="HSPA+";;
				*) MODE="-";;
			esac
		fi
		EARFCN=$(echo "$O" | awk -F[,\ ] '/^\^HFREQINFO/ {print $4}')
		if [ "x${EARFCN}" = "x" ]; then
			EARFCN=$(echo "$O" | awk -F[,\ ] '/^\^MONSC/ {print $5}')
		fi
		BWDx=$(echo "$O" | awk -F[,\ ] '/^\^HFREQINFO/ {print $6}')
		RSRx=$(echo "$O" | awk -F[,:] '/^\^LTERSRP:/ {print $2}')
		if [ "x$RSRx" != "x" ]; then
			RSRP=$RSRx
			RSRQ=$(echo "$O" | awk -F[,:] '/^\^LTERSRP:/ {print $3}')
		elif [ "x$RSRx" = "x" ]; then
			SINR=$(echo "$O" | awk -F[,:] '/^\^CSNR:/ {print $3}')
		fi
		TECH=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $2}' | sed 's/[" ]//g')
		if [ "x$TECH" != "x" ]; then
			PARAM1=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $3}')
			PARAM2=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $4}')
			PARAM3=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $5}')
			PARAM4=$(echo "$O" | awk -F[,:] '/^\^HCSQ:/ {print $6}')

			case "$TECH" in
				WCDMA*)
					CSQ_RSSI=$(awk -v v="$PARAM1" 'BEGIN {print -121 + v}')
					RSCP=$(awk -v v="$PARAM2" 'BEGIN {print -121 + v}')
					SINR=$(awk -v v="$PARAM3" 'BEGIN {print -32.5 + v/2}')
				;;
				LTE*)
					PCI=$(echo "$O" | awk -F [,] '/MONSC/{print $6}')
					ECI=$((0x$CID))
					ENBID=$((ECI >> 8))
					CELL=$((ECI & 0xFF))
					CSQ_RSSI=$(awk -v v="$PARAM1" 'BEGIN {print -121 + v}')
					RSRP=$(awk -v v="$PARAM2" 'BEGIN {print -141 + v}')
					SINR=$(awk -v v="$PARAM3" 'BEGIN {print -20.2 + v/5}')
					RSRQ=$(awk -v v="$PARAM4" 'BEGIN {print -20 + v/2}')
				;;
				*)
					SINR="--"
				;;
			esac
		fi
		CHIPTEMP=$(echo "$O" | awk -F[,] '/^\^CHIPTEMP/ {print $4}')
		# 65535 -> Not supported currently
		if [ $CHIPTEMP -eq 65535 ]; then
			# CHIPTEMP for Huawei ME909u series
			CHIPTEMP=$(echo "$O" | awk -F[,] '/^\^CHIPTEMP/ {printf "%.0f\n", $6 * 0.1}')
		fi
		case $BWDx in
			1400) BWDL=0 ;;
			3000) BWDL=1 ;;
			5000) BWDL=2 ;;
			10000) BWDL=3 ;;
			15000) BWDL=4 ;;
			20000) BWDL=5 ;;
		esac

		[ "$MDM" -eq 1 ] && [ -f "/usr/share/modeminfo/scripts/QMDM" ] && . "/usr/share/modeminfo/scripts/QMDM"

		if [ "$PID" = "1566" ]; then
			AT_DEVICE="$DEVICE"
			AT_FW="$FW"
			AT_MODE="$MODE"
			AT_IMEI="$IMEI"
			AT_IMSI="$IMSI"
			AT_ICCID="$ICCID"
			AT_CSQ_RSSI="$CSQ_RSSI"
			AT_RSRP="$RSRP"
			AT_RSRQ="$RSRQ"
			AT_SINR="$SINR"
			AT_CELL="$CELL"
			AT_ENBID="$ENBID"
			AT_EARFCN="$EARFCN"
			AT_BWDL="$BWDL"

			. "/usr/share/modeminfo/scripts/HUAWEI.curl"

			[ -n "$AT_DEVICE" ] && DEVICE="$AT_DEVICE"
			[ -n "$AT_FW" ] && FW="$AT_FW"
			[ -n "$AT_MODE" ] && [ "$AT_MODE" != "-" ] && MODE="$AT_MODE"
			[ -n "$AT_IMEI" ] && IMEI="$AT_IMEI"
			[ -n "$AT_IMSI" ] && IMSI="$AT_IMSI"
			[ -n "$AT_ICCID" ] && ICCID="$AT_ICCID"
			[ -n "$AT_CSQ_RSSI" ] && CSQ_RSSI="$AT_CSQ_RSSI"
			[ -n "$AT_RSRP" ] && RSRP="$AT_RSRP"
			[ -n "$AT_RSRQ" ] && RSRQ="$AT_RSRQ"
			[ -n "$AT_SINR" ] && SINR="$AT_SINR"
			[ -n "$AT_CELL" ] && CELL="$AT_CELL"
			[ -n "$AT_ENBID" ] && ENBID="$AT_ENBID"
			[ -n "$AT_EARFCN" ] && EARFCN="$AT_EARFCN"
			[ -n "$AT_BWDL" ] && BWDL="$AT_BWDL"
		fi
	else
		. "/usr/share/modeminfo/scripts/HUAWEI.curl"
	fi
}
