modem_data(){
	# hwdata
	OIFS="$IFS"
	IFS="|"
	set -- $(echo "$O" | awk -v family=$FAMILY '
		BEGIN{IGNORECASE=1} $0 ~ family {manuf=$0; getline model; getline fw}
		/^ICCID:/{iccid=$2; getline imsi; getline imei}
		/Temperature:/{temp=$5}
		END { print manuf "|" model "|" fw "|" iccid "|" imsi "|" imei "|" temp}')

	MANUF=${1}; MODEL=${2}; FW=${3}; ICCID=${4}; IMSI=${5}; IMEI=${6}; CHIPTEMP=${7}
	IFS="$OIFS"
	unset OIFS
        DEVICE="$MANUF $MODEL"
	# Sierra cell data
	TECH=$(echo "$O" | awk -F[,\ ] '/^\*CNTI/ {print $3}' | sed 's|/|,|g')
	OIFS="$IFS"
	IFS="|"
	set -- $(echo "$O" | awk -v tech=$TECH -v model=$MODEL '
		BEGIN { map[3]=1; map[5]=2; map[10]=3; map[15]=4; map[20]=5 }
		tech ~ "LTE" {
			if (/^\+CEREG/ && model ~ /73|74/) {gsub("\"","");split($0,a,","); lac=a[3]; cid=a[5]}
			if (/^\+CEREG/ && model !~ /73|74/) {gsub("\"","");split($0,a,","); lac=a[3]; cid=a[4]}
			if (/LTE bw/) {bwc = $6; bw = map[bwc]}
			if (/LTE Rx chan:/) { earfcn=$4 }
			if (/LTE CA state:/) { ca = $4; lte_ca = (ca ~ /INACTIVE|NOT/) ? 0 : 1 }
			if (/PCC RxM RSSI:/){rssi=$4; rsrp=$7}
			if (/RSRQ/) {rsrq = sprintf("%.0f",$3); getline; sinr = sprintf("%.0f",$3);exit}
		}
		tech !~ "LTE" {
			if (/^\+CGREG/) {gsub("\"","");split($0,a,","); lac=a[3]; cid=a[4]}
			if (/channel:/) {earfcn=$3}
			if (/QCSQ/) {split($0,a,",|:"); rssi=a[2]; sinr=a[3]}
		}
		END { print earfcn "|" lac "|" cid "|" rssi "|" sinr "|" rsrp "|" rsrq "|" bwc "|" bw "|" lte_ca}')

	EARFCN=${1}; LAC=${2}; CID=${3}; CSQ_RSSI=${4}; SINR=${5}; RSRP=${6}; RSRQ=${7}; BWDx=${8}; BWDL=${9}; LTE_CA=${10}
	unset OIFS
	if [ "x$TECH" != "x" ]; then
		MODE="$TECH"
		case $MODE in
			NONE) MODE=LTE ;;
		esac
	fi

	if [ $MODE = "LTE" ]; then
		ENBx=$(echo $CID | sed -e 's/..$//')
		CELL=$(printf %d 0x${CID: -2})
		ENBID=$(printf %d 0x$ENBx)
		PCI=$(echo "$O" | awk -F [:,] '/QCRSRQ:/{print $2}')
		if [ $LTE_CA -ge 1 ]; then
			SCC=$(echo "$O" | awk -F [:] '/LTE Scell band/{gsub("B","");printf "%s", "+"$NF} END{print ""}')
			[ $SCC ] || SCC=$(echo "$O" | awk '/LTE SCC[1-5] band:/{gsub("B", ""); printf "%s", "+"$NF} END{print ""}')
			case $MODEL in
				*73*|*74*) BWCA=$(echo "$O" | awk  -v bwdx=$BWDx -F [:] '/LTE Scell bw:/{sum += $2} END{print sum + bwdx}') ;;
				*) BWCA=$(echo "$O" | awk -v bwdx=$BWDx '/LTE SCC[1-9] bw/{sum += $5} END{print sum + bwdx}') ;;
			esac
		fi
	fi

	if [ $(uci -q get modeminfo.@general[0].decimail) = "1" ]; then
		LAC=$(printf %d 0x$LAC)
		CID=$(printf %d 0x$CID)
	fi
}
