带健康设备的串口转 USB Android 应用程序

2024-06-01

我正在创建一个 Android 应用程序,让我的 Galaxy 平板电脑通过串行到 USB 连接与健康设备进行通信。

我实现的代码不起作用! OUT 和 IN 通讯均未启动

有人有什么想法吗?

public void recordData(View _view){
    text = (TextView)findViewById(R.id.textView1);





    manager=(UsbManager) getSystemService(Context.USB_SERVICE);

    PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
    IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
    registerReceiver(mUsbReceiver, filter);


    HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
    Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
    while(deviceIterator.hasNext()){
        UsbDevice device = deviceIterator.next();
        manager.requestPermission(device, mPermissionIntent);
        text.setText(text.getText()+"\n"+device.getDeviceName());
    }


}


private UsbManager manager=null;

private boolean forceClaim = true;
private UsbDeviceConnection connection;
private UsbEndpoint input = null,output=null; 
private static final String ACTION_USB_PERMISSION = "com.android.example.USB_PERMISSION";
    private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {

        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (ACTION_USB_PERMISSION.equals(action)) {
                synchronized (this) {
                    isRecording=true;
                    UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

                    if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
                        if(device != null){
                          //call method to set up device communication
                            UsbInterface intf = device.getInterface(0);
                            connection = manager.openDevice(device); 
                            connection.claimInterface(intf, forceClaim);

                            //connection settings
                            int op= connection.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset   //0x40
                            int op2= connection.controlTransfer(0x40, 0, 1, 0, null, 0, 0);//clear Rx  
                            int op3= connection.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
                            int op3b=  connection.controlTransfer(0x40, 0x02, 0x0000, 0, null, 0, 0);//control flow

                            int op4= connection.controlTransfer(0x40, 0x03, 0x001A, 0, null, 0, 0);// baud rate 115200
                            int op5= connection.controlTransfer(0x40, 0x04, 0x0008, 0, null, 0, 0);//8 bit

                            int endPts = intf.getEndpointCount();

                            for(int e = 0; e < endPts; e++){
                                UsbEndpoint endpoint = intf.getEndpoint(e);
                                endpoint.getAttributes();

                                if( endpoint.getType() == UsbConstants.USB_ENDPOINT_XFER_BULK){
                                    if(endpoint.getDirection() == UsbConstants.USB_DIR_IN){
                                        input = endpoint;
                                        Log.d("Endpoint", "Got input");

                                    }else if(endpoint.getDirection() == UsbConstants.USB_DIR_OUT){
                                        output = endpoint;
                                        Log.d("Endpoint", "Got output");
                                    }                       
                                }
                            }



                            text.setText(text.getText()+"\nOut= "+String.valueOf(output.getEndpointNumber()));
                            text.setText(text.getText()+"\nIn= "+String.valueOf(input.getEndpointNumber()));


                            byte [] buffer = {77}; // M\n in ascii
                            for (int i = 0; i < buffer.length; ++i)
                            {
                                connection.bulkTransfer(output, new byte[] {buffer[i]}, 1, 0);
                            }



                            read();

                       }
                    } 
                    else {
                        //error
                    }
                }
            }
        }
    };

//read thread
    private void read() {
        Runnable r = new Runnable() {
            byte[] buffer = new byte[64];
            byte[] buffer2;
            public void run() {
                while (isRecording) {
                    {
                        int op = connection.bulkTransfer(input, buffer, 64, 0);

                        if (op > 2) {
                            buffer2 = new byte[op];
                            for (int i = 0; i < op - 2; ++i) {
                                buffer2[i] = buffer[i+2];
                                text.setText(text.getText()+"\n"+String.valueOf(buffer2[i]));
                            }

                        }
                    }

                }
            }
        };
        Thread t = new Thread(r);
        t.start();

非常感谢!


在尝试发送字节之前,您必须首先控制事务:

Use:

// for writing to USB with 9600 baudrate
connection.controlTransfer(0x00000000, 0x03, 0x4138, 0, null, 0, 0);

and

// for reading from USB with 9600 baudrate
connection.controlTransfer(0x00000080, 0x03, 0x4138, 0, null, 0, 0);

参考:

  • http://developer.android.com/guide/topics/connectivity/usb/host.html http://developer.android.com/guide/topics/connectivity/usb/host.html
  • http://developer.android.com/reference/android/hardware/usb/UsbConstants.html http://developer.android.com/reference/android/hardware/usb/UsbConstants.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带健康设备的串口转 USB Android 应用程序 的相关文章

  • 从可打开的 URI 将本机 fd int 传递到 FFMPEG

    我正在尝试从打开一个文件描述符CATEGORY OPENABLE来自存储访问框架的 URI 我首先尝试使用 SD 卡上的文件 我已经可以使用以下命令将其解析为文件路径 data列并打开 我试图避免这样做 而是使用文件描述符 我得到的原生 i
  • Android正则表达式-返回匹配的字符串

    在我的 Android 项目中 我有一个正则表达式和一个字符串 其中应该有匹配的表达式 问题是我只找到了一个matches 方法 返回布尔值 有没有什么东西 只返回匹配的字符串 例如 如果我的字符串是 中午 12 点去商店 我想检查该字符串
  • Android 显示自定义类型的联系人

    我已经导入了联系人列表的样本 形成此链接 http developer android com training contacts provider display contact badge html http developer and
  • 在 Android 中录制、保存和播放视频

    我正在尝试制作一个使用相机应用程序录制视频的应用程序 然后将该视频保存在 SD 卡上 以便我可以播放它 我有一些代码 但我不知道如何继续 因为我是 Android 初学者 我的活动 public class Camcorder extend
  • 如何使网页视图与其内容一样大?

    我在网上找不到这个 我有很多网络浏览量HorizontalScrollView 我希望它们全部适合其内容 然后可能具有不同的宽度 更多 我给那些充气webviews像这样 LinearLayout layout LinearLayout g
  • 如何从 JSON 响应中获取所选微调项目的 ID?

    Outline 我必须从服务器获取一些运营商列表 下面是我的 JSON 数据 PrepaidServiceList operator id 2 operator name Reliance GSM operator id 9 operato
  • Android - 如何使按钮不可见但仍处于活动状态?

    我试图在我的平板电脑上创建一个 热点 其作用类似于按钮 但用户看不到该按钮 当我尝试以下操作时 我有一个按钮 但当可见性设置为 4 时 用户无法交互或看到它 Button b Button findViewById R id b b set
  • 一部又一部的Android动画

    我在 TextView 上有两个 TranslateAnimations 我希望它们一个接一个地执行 但是 通过使用下面的代码 仅执行第二个代码 我该如何解决这个问题 TranslateAnimation animation new Tra
  • 如何在Android中访问Sqlite数据库?

    我可以在模拟器中使用 adb shell 命令访问我的 sqlite 数据库 但无法对我的 HTC Desire 手机执行相同操作 它会抛出一些权限被拒绝的消息 是否有可能访问这些数据库以进行调试 任何想法 提前致谢 您还可以在命令提示符
  • 无法绑定到调试器的本地 XXXX

    我不断得到Can t bind to local XXXX for debugger控制台中的消息 但不适用于 1 个端口 适用于所有随机端口 我已经完成了中所述的操作这个问题 https stackoverflow com questio
  • 尝试在空对象引用上调用接口方法“...”

    我正在开发一个具有蓝牙功能的应用程序 我使用片段来扫描并列出蓝牙设备 单击时 会回调提供所选蓝牙设备的主要活动 我从使用 Android 6 API 23 的智能手机开始 然后必须调整代码以用于 Android 5 0 API 21 我刚刚
  • Android 应用程序用户尝试更新时收到“应用程序未安装”消息

    UPDATE 对于那些询问用户收到哪些错误代码的人 没有错误代码 它只是打开一个空白的安装后页面 上面写着 该应用程序未安装 旁边有一个大 X 不同版本的 Android 可能有不同的消息 没有任何迹象表明安装过程中出了什么问题 更新2 一
  • 从视频文件中提取音频的问题(android)

    我需要将 mp4 或任何其他视频格式 转换为 mp3 或 wav 文件 我正在使用 C Xamarin Forms 我使用的任何库要么不适合我 要么与 android 不兼容 我尝试过使用 Xamarin Android FFMpeg 和
  • 将mapView缩放到osmdroid上的某个边界框

    我想使用 ZoomToBoundingBox 方法将地图缩放到特定的边界框 该方法除了以缩放级别 0 显示地图外什么也不做 在mapView java源代码中我发现了这个 缩放地图以尽可能靠近地包围指定的边界框 必须在显示布局完成后调用 否
  • 如何在改造中在主体内传递 JSON 数组

    intent sale redirect urls return url http example com your redirect url html cancel url http example com your cancel url
  • 使用 ExoPlayer 播放 YouTube 视频 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣使用外放播放器 http developer android com guide topics
  • 菜单项标题未显示

    菜单项的标题未显示在片段内 我在菜单文件中有两个项目 第一个是带有图标和标签的showAsAction always在工具栏中显示图标 第二个只有标题 我不知道这里出了什么问题 菜单项的所有操作均有效 例如下面 菜单 销售 xml menu
  • 当我关闭应用程序时,AsyncTask 是否会停止?

    我想将文件从手机上传到服务器 因为我正在使用 AsyncTask 如果文件很大 如果它们仍在上传并且用户关闭应用程序 上传会停止 即 AsyncTask 将结束还是继续直到完成 推荐使用Service http developer andr
  • 如何为Android编译最新的FFmpeg库?

    努力将当前 FFmpeg 的工作和一般最佳实践构建在一起 似乎没有最新的文档或教程 现有的内容充满了过时的链接或不起作用的构建脚本 构建独立的 NDK 工具链 下载最新的NDK并运行make standalone toolchain py
  • Ionic 3 Deeplinking - 从 URL 启动应用程序

    我正在使用 Ionic 开发一个跨平台应用程序 当尝试实现深度链接时 我安装了一个名为 Ionic Native 插件深层链接 我运行了这些命令 ionic cordova plugin add ionic plugin deeplinks

随机推荐