2013-08-16 2 views
0

나는 CC2540 BLE 키트가 있으며 스마트 폰 어플리케이션의 키트 배터리 레벨을보고 싶습니다. 키트에서 배터리 잔량을 확인하는 코드를 만들었습니다. 이 경우 배터리 레벨은 BodySensor입니다.TI CC2540 Bluetooth 저에너지 키트로부터 데이터 수신

먼저 배터리 키트의 배터리 특성 값을 입력하겠습니다. 그래서 배터리 서비스에 대한 서비스 및 특성 UUID 년대를 사용

public void getBodySensorLoc(BluetoothDevice device) 
{ 
    Log.i(TAG, "getBodySensorLoc"); 
    BluetoothGattService mHRP = mBluetoothGatt.getService(device, HRP_SERVICE); 
    if (mHRP == null) 
    { 
     Log.e(TAG, "getBodySensorLoc: mHRP = null"); 

     return; 
    } 
    BluetoothGattCharacteristic mBSLcharac = mHRP.getCharacteristic(BODY_SENSOR_LOCATION); 
    if (mBSLcharac == null) { 
     Log.e(TAG, "getBodySensorLoc: mBSLcharac = null"); 
     return; 
    } 
    mBluetoothGatt.readCharacteristic(mBSLcharac); 
} 

내 목적은 배터리 수준을 읽는 것입니다, 내 응용 프로그램에서 버튼을 누르면. 그래서 저는 Activity 클래스에이 버튼을 구현합니다 :

((Button) findViewById(R.id.btn_BSL)).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) 
     { 
      mService.getBodySensorLoc(mDevice); 
     } 
    }); 

이 키트는 자동으로 배터리 레벨을 다시 스마트 폰으로 보냅니다. 그래서 난 내 코드에서 BluetoothGattCallback 부분의 onCharacteristicRead 방법에 포커스를 설정합니다 :

private BluetoothGattCallback mGattCallbacks = new BluetoothGattCallback() 
{ 

    public void onCharacteristicRead(BluetoothGattCharacteristic charac, int status) 
    { 
     UUID charUuid = charac.getUuid(); 
     Bundle mBundle = new Bundle(); 
     Message msg = Message.obtain(mActivityHandler, HRP_VALUE_MSG); 
     Log.i(TAG, "onCharacteristicRead"); 
     if (charUuid.equals(BODY_SENSOR_LOCATION)) 
      mBundle.putByteArray(BSL_VALUE, charac.getValue()); 
     msg.setData(mBundle); 
     msg.sendToTarget(); 
    } 
}; 

나는 응용 프로그램이 텍스트 뷰에서 수신 된 배터리 수준을 보여주고 싶다. 키트는 배터리 레벨을 정수로 전송하므로 레벨이 70 %이면 "70"을 보냅니다. 이 코드는 액티비티 클래스의 핸들러를 포함

private Handler mHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     switch (msg.what) 
     { 
     case HRPService.HRP_VALUE_MSG: 
      Log.d(TAG, "mHandler.HRP_VALUE_MSG"); 
      Bundle data1 = msg.getData(); 
      final byte[] bslval = data1.getByteArray(HRPService.BSL_VALUE); 
      runOnUiThread(new Runnable() 
      { 
       public void run() 
       { 
        if (bslval != null) 
        { 
         try { 
          Log.i(TAG, "BYTE BSL VAL =" + bslval[0]); 
          TextView bsltv = (TextView) findViewById(R.id.BodySensorLocation); 
          bsltv.setText("\t" + mContext.getString(R.string.BodySensorLocation) 
            + getBodySensorLocation(bslval[0])); 
         } catch (Exception e) 
         { 
          Log.e(TAG, e.toString()); 

         } 

        } 
       } 
      }); 

     default: 
      super.handleMessage(msg); 
     } 
    } 
}; 

문제는 내가 키트와 함께 스마트 폰을 연결 한 후 난 내 응용 프로그램에서이 버튼을 누를 때 텍스트 뷰가 아무것도 표시되지 않는다는 것입니다. 누군가가 문제가있는 곳을 말해 줄 수 있습니까?

미리 감사드립니다.

+0

"Log.i (TAG,"BYTE BSL VAL = "+ bslval [0]);"에서 아무 것도 읽을 수 있습니까? – mass

답변

0

정확한 키트는 무엇인지 모릅니다. 배터리 레벨 측정 하드웨어가 모두 장착되어 있는지 확실하지 않습니다. 어쩌면 이것이 이유 일 것입니다.

관련 문제