Parsing raw data received from bluetooth HDP device

前端 未结 6 1627
长情又很酷
长情又很酷 2021-02-01 00:02

I am trying to read data from an Omron 708-BT Blood Pressure Monitor which is certified by the continua health alliance. I am following this example of a Bluetooth HDP App. I am

6条回答
  •  萌比男神i
    2021-02-01 00:09

    @ Jieqin - great that you got it too :)

    paste this in your reading thread under the block of

    else if (data[0] == (byte)0xE7){
    Log.i(TAG, "E7");
    //work for legacy device...
    if (data[18] == (byte) 0x0d && data[19] == (byte) 0x1d)  //fixed report
    

    to parse your agents answer - and if it works, please rate my hints :)

    else if (data[18] == (byte) 0x0d && data[19] == (byte) 0x1f)  //mp var report
                            {
                                    count = 999; 
                                    //set invoke id so get correct response
                                    invoke = new byte[] { data[6], data[7] };
                                    //write back response
                                    (new WriteThread(mFd)).start();     
                                    //parse data!!
                                    int length = data[21];
                                    Log.i(TAG, "length is " + length);
                                    // check data-req-id 
                                    int report_no = data[25];
                                    int number_of_data_packets = data[29];
                                    //packet_start starts from handle 0 byte
                                    int packet_start = 36;
                                    final int SYS_DIA_MAP_DATA = 1;
                                    final int PULSE_DATA = 2;
                                    final int STATUS = 3;
                                    for (int i = 0; i < number_of_data_packets; i++)
                                    {
                                        int obj_handle = data[packet_start+1];
                                        switch (obj_handle)
                                        {
                                        case SYS_DIA_MAP_DATA:
                                            int sys = byteToUnsignedInt(data[packet_start+9]);
                                            int dia = byteToUnsignedInt(data[packet_start+11]);
                                            int map = byteToUnsignedInt(data[packet_start+13]);
    
                                            Log.i(TAG, "sys is "+ sys);
                                            sendMessage(RECEIVED_SYS, sys);
                                            Log.i(TAG, "dia is "+ dia);
                                            sendMessage(RECEIVED_DIA, dia);
                                            Log.i(TAG, "map is "+ map);
    
                                            break;
                                        case PULSE_DATA:
                                            //parse
                                            int pulse = byteToUnsignedInt(data[packet_start+5]);
                                            Log.i(TAG, "pulse is " + pulse);
                                            sendMessage(RECEIVED_PUL, pulse);
                                            break;
                                        case STATUS:
                                            //need more signal
                                            Log.i(TAG, "STATUS");
                                            break;
                                        }
                                        packet_start += byteToUnsignedInt(data[packet_start+3]) + 4;   //4 = ignore beginning four bytes
                                    }                               
                            }
    

提交回复
热议问题