# Quectel modems
function modem_data(){
	generic_data
	# hwinfo
        MANUF=$(echo "$O" | grep -i $FAMILY)
	MDL=$(echo "$O" | grep -A1 -i $FAMILY | tail -1)
	DEVICE="$MANUF $MDL"
        FW=$(echo "$O" | grep -A2 -i $FAMILY | tail -1)
        ICCID=$(echo "$O" | awk -F [:] '/ICCID:/{gsub("\r","");print $2}')
	case $MDL in
		*EC200*)
		        IMSI=$(echo "$O" | grep -A3 -i $FAMILY | tail -1)
		        IMEI=$(echo "$O" | grep -A4 -i $FAMILY | tail -1)
		;;
                *EC21*|*EC25*|*EP06*|*EM12*|*EM160*)
                        IMSI=$(echo "$O" | grep -A1 -i $FW | tail -1)
                        IMEI=$(echo "$O" | grep -A1 -i $ICCID | tail -1)
		;;
		*)
			IMSI=$(echo "$O" | grep -A1 -i ICCID | tail -1)
			IMEI=$(echo "$O" | grep -A2 -i ICCID | tail -1)
		;;
	esac
	# signal info
	if [ "$MODE" = "LTE" ]; then
		EARFCN=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $10}')
		RSRP=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $15}')
		SINR=$(echo "$O" |awk -F "[\, ]" '/\+QENG:/{print $18}')
		PCI=$(echo "$O" |awk -F "[\, ]" '/\+QENG:/{print $9}')
		CID=$(echo "$O" |awk -F "[\, ]" '/\+QENG:/{print $8}')
		LAC=$(echo "$O" |awk -F "[\, ]" '/\+QENG:/{print $14}')
		ENBx=$(echo $CID | sed -e 's/..$//')
		CELL=$(printf %d 0x${CID: -2})
		ENBID=$(printf %d 0x$ENBx)
		case $MDL in
			# EC200 send incorrect RSSI value, use value from AT+CSQ
			*EC200*) continue ;;
			*) CSQ_RSSI=$(echo "$O" |awk -F "[\, ]" '/\+QENG:/{print $17}') ;;
                esac
		RSRQ=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $16}')
		BWUL=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $12}')
		BWDL=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $13}')
		LTE_CA=$(echo "$O" | awk '/^\+QCAINFO/{print $0}' | wc -l)
		if [ $LTE_CA -ge 2 ]; then
			CA_INFO=$(echo "$O" | awk '/^\+QCAINFO/{print $0}' | awk '/scc/{print $0}')
			CA=$(echo "$CA_INFO" | awk -F [\,] '{print $4}' | awk '{print $3}' | sed 's/\"//g')
			BWC=$(echo "$CA_INFO" | awk -F [\,] '{print $3}')
			for cc in $CA; do
				SC=$cc
				SCC="$SCC+$SC"
			done
			case $BWDL in
				1) BWCP=3 ;;
				2) BWCP=5 ;;
				3) BWCP=10 ;;
				4) BWCP=15 ;;
				5) BWCP=20 ;;
			esac
			for BW in $BWC; do
				case $BW in
					15) BWCC=3 ;;
					25) BWCC=5 ;;
					50) BWCC=10 ;;
					75) BWCC=15 ;;
					100) BWCC=20 ;;
				esac
				BWCA="$BWCA+$BWCC"
			done
			BWCA=$(($BWCP$BWCA))
		fi
	elif [ "$MODE" = "EDGE" ]; then
		LAC=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $6}')
		CID=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $7}')
		EARFCN=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $10}')
	else
		LAC=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $7}')
		CID=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $8}')
		EARFCN=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $9}')
		ECIO=$(echo "$O" |awk -F[,\ ] '/^\+QENG/ {print $13}')
		SINR=$ECIO
	fi
	case $MDL in
		*EM12*) CHIPTEMP=$(echo "$O" | awk -F'[,\ ]' '/^\+QTEMP/ {gsub("\"",""); print $3}') ;;
		*EM160*) CHIPTEMP=$(echo "$O" | awk -F[,\ ] '/^\+QTEMP: \"cpu-usr\"/ {gsub("\"","");print $3}') ;;
		*)
			CHIPTEMP=$(echo "$O" | awk -F[,\ ] '/^\+QTEMP/ {print $3}')
			# Quectel EM1X modem temp sensors
			if [ ! $(echo "$CHIPTEMP" | grep "^?[0-9]+$") ] || [ $CHIPTEMP -eq 255 ]; then
				CHIPTEMP=$(echo "$O" | awk -F[,\ ] '/^\+QTEMP/ {gsub("\"",""); print $2}')
			fi
		;;
	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
}
