0

我正在尝试从使用 OTG 电缆连接到安卓手机(三星 Galaxy 7、安卓 8.0)的 RTL-SDR 加密狗(RTL2832U R820T2)获取 I/Q 信号。我正在使用rtl-tcp-android驱动程序。我已经通过编译和下载它的源代码安装了驱动程序,并且我可以使用SDR Touch应用程序(由驱动程序的作者创建)接收 FM 信号,据我了解驱动程序安装本身应该没问题。

驱动程序的github 页面解释了如何获取 I/Q 样本。它说一旦使用 Android Intent 正确调用了驱动程序,如果我可以使用 tcp client读取驱动程序的输出,我应该能够读取 uint_8 格式的交错 I/Q 数据。我正在尝试使用这个答案来制作一个 tcp 客户端。在TcpClinet课堂上,在while (mRun)循环内,我改变了行

mServerMessage = mBufferIn.readLine();   

mServerMessage = Integer.toString( mBufferIn.read() );  

显然,该答案期望 tcp 数据以文本行的形式出现,而我应该获得的数据是 uint_8 数据的连续流。(实际上,如果我不进行此更改,程序最终会在 readLine() 函数处因内存不足异常而崩溃)。我还使用适合我设备的值更改了 TcpClient 类中 SERVER_IP 和 SERVER_PORT 成员变量的值。与 tcp 客户端相关的所有其他内容都与该答案中的相同。

在 onProgressUpdate() 中,我得到 0x7f 和 0xfffd 的随机序列。

这是我现在在 MainActivity 中使用的 onProgressUpdate() 函数:

@Override
protected void onProgressUpdate(String...values){  
   super.onProgressUpdate(values);  
   Log.d("MYLOG", "response " + values[0] + String.format( "(0x%x)", Integer.parseInt( values[0] ) );  
}

这是我的 logcat 的一部分:

2019-10-31 14:37:21.629 7232-7232/? D/MYLOG: response 65533(0xfffd)
2019-10-31 14:37:21.633 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.635 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.643 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.645 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.651 7232-7232/? D/MYLOG: response 65533(0xfffd)
2019-10-31 14:37:21.654 7232-7232/? D/MYLOG: response 65533(0xfffd)
2019-10-31 14:37:21.655 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.657 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.658 7232-7232/? D/MYLOG: response 65533(0xfffd)
2019-10-31 14:37:21.663 7232-7232/? D/MYLOG: response 65533(0xfffd)
2019-10-31 14:37:21.666 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.669 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.671 7232-7232/? D/MYLOG: response 65533(0xfffd)
2019-10-31 14:37:21.673 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.687 7232-7232/? D/MYLOG: response 127(0x7f)
2019-10-31 14:37:21.689 7232-7232/? D/MYLOG: response 65533(0xfffd)  

我很确定这是不正确的,我怀疑 tcp 客户端代码有问题。如何修改此代码以正确与 rtl-tcp-android 驱动程序通信?

编辑 1---

这是对我尝试但不起作用的代码的编辑(基于对同一链接问题的回答)

mRun = true;
try {
    InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
    Log.e("TCP Client", "C: Connecting...");
    Socket socket = new Socket(serverAddr, SERVER_PORT);
    try {
        mBufferOut = new PrintWriter(socket.getOutputStream());
        Log.e("MYLOG", "TCP Client; C: Sent.");
        mBufferIn = new DataInputStream(socket.getInputStream());
        int charsRead = 0; short[] buffer = new short[1024]; //choose your buffer size if you need other than 1024

        while (mRun) {
            // charsRead = mBufferIn.read(buffer);
            // int length = mBufferIn.readInt();
            int length = 5;
            // Log.d("MYLOG", String.format("length = %d", length ) );
            if(length > 0){
                byte[] message = new byte[length];
                // mBufferIn.readFully(message, 0, message.length);
                mBufferIn.read(message, 0, message.length);
                // just display here instead of sending as a String to onProgressUpdate()
                for(int i=0; i<length; i++){
                    Log.d("MYLOG", String.format("message[%d] = %d (0x%x)", i, message[i], message[i]) );
                }
            }
            // mServerMessage = new String(buffer).substring(0, charsRead);
            if (mServerMessage != null && mMessageListener != null) {
                mMessageListener.messageReceived(mServerMessage);}
            mServerMessage = null;
        }
        Log.e("MYLOG", "RESPONSE FROM SERVER; S: Received Message: '" + mServerMessage + "'");  

mBufferIn声明已更改为

private DataInputStream mBufferIn;  

在程序执行其他任何操作之前,我想首先确保正确的数据来自TcpClient类的函数本身。run()通过此更新,我在 logcat 中得到 0x7f 和 0x80。

4

0 回答 0