Linux取得4 G信号強度

2404 ワード

多くの資料を探したが、4 G信号の強度を取得するアプリケーションコードが見つからなかった.
最後は仕方ないので、自分で書くしかありません
まず、ATコマンドが何であるかを知るには、次の接続を参照してください.
https://www.cnblogs.com/yuweifeng/p/5587473.html
4 Gデバイスが正常に動作している場合は、次のコマンドを入力すると、デバイスの現在の信号が得られます.
コマンド:cat/dev/ttyUSB 2&
echo -e "AT+CSQ\r">/dev/ttyUSB2
取得:
AT+CSQ +CSQ: 28,99 OK AAT+CSQ +CSQ: 28,99
28 rssiが信号格子参照文に変換されただけhttp://velep.com/archives/1147.html
大体理解すればいいです.次はqtで書いたコードです.共同で検討します.伝言を歓迎します.
void MainWindow::GetCurSignalStrenght(void)
{
	printf("============Geting CurSignalStrenght============
"); int SentATcount = 100; if(ec20check==1) { system("cat /dev/ttyUSB2 | grep \'CSQ\' > signalstrength&"); while(SentATcount--) { printf("============Launch AT command============
"); system("echo -e \"AT+CSQ\\r\
\" > /dev/ttyUSB2"); printf("echo -e \"AT+CSQ\\r\
\" > /dev/ttyUSB2
"); usleep(1000); QFile tempFile("signalstrength"); if (!tempFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug()< tempfilesignal"); QFile signalFile("tempfilesignal"); if (!signalFile.open(QIODevice::ReadOnly | QIODevice::Text)) { signalStrenght = 0; qDebug()<="<%d
",rssi.toInt(&ok,10)); int signalTrans =-113 + (2 * rssi.toInt(&ok,10)); printf(" signalTrans is ->%d
",signalTrans); if(signalTrans >-91) { signalStrenght = 5; } else if(signalTrans <= -91 && signalTrans>-101) { signalStrenght = 4; } else if(signalTrans <= -101 && signalTrans>-103) { signalStrenght = 3; } else if(signalTrans <= -103 && signalTrans>-107) { signalStrenght = 2; } else if(signalTrans <= -107 && signalTrans>-113) { signalStrenght = 1; } else { //no signal signalStrenght = 0; } printf("=======Get signalStrenght success.= signalStrenght is %d=======
",signalStrenght); } else { printf("=======Get signalStrenght failed...==set signalStrenght zero=======
"); signalStrenght = 0; } } } system("rm tempfilesignal -rf"); }