package com.github.captain_miao.android.ble; import android.bluetooth.BluetoothDevice; import android.os.Bundle; import android.os.Message; import com.github.captain_miao.android.ble.constant.BleConstants; import com.github.captain_miao.android.ble.utils.BleLog; import java.util.UUID; /** * @author YanLu * @since 2015-09-14 * * handle ble commend */ public class BleServiceHandle extends AppHandler<BaseBleService> { private final static String TAG = BleServiceHandle.class.getName(); public BleServiceHandle(BaseBleService reference) { super(reference); mMessageListener = new HandleMessageListener<BaseBleService>() { @Override public void onHandleMessage(BaseBleService reference, Message msg) { onBleServiceMessage(reference, msg); } }; } public void onBleServiceMessage(BaseBleService reference, Message msg) { if (msg != null) { Bundle data = msg.getData(); switch (msg.what) { case BleConstants.MSG_CONTROL_ID_REGISTER: BleLog.i(TAG, "BleService Registered"); if (msg.replyTo != null) { reference.addClient(msg.replyTo); } break; case BleConstants.MSG_CONTROL_ID_UNREGISTER: BleLog.i(TAG, "client unregistered"); if (msg.replyTo != null) { reference.removeClient(msg.replyTo); } break; case BleConstants.MSG_CONTROL_ID_START_SCAN: { BleLog.i(TAG, "start scan..."); reference.startScan(); break; } case BleConstants.MSG_CONTROL_ID_STOP_SCAN: { BleLog.i(TAG, "start scan..."); reference.stopScan(); break; } case BleConstants.MSG_CONTROL_ID_CONNECT_DEVICE: { BluetoothDevice device = data.getParcelable(BleConstants.BLE_MSG_BLE_DEVICE_KEY); reference.connectDevice(device); break; } case BleConstants.MSG_CONTROL_ID_CONNECT_MAC: { String mac = (String) msg.obj; reference.directlyConnectDevice(mac); break; } //write_characteristic case BleConstants.MSG_CONTROL_ID_WRITE_CHARACTERISTIC: { if(data != null) { UUID serviceUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_SERVICE_UUID_KEY); UUID characteristicUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_CHARACTERISTIC_UUID_KEY); byte[] values = (byte[]) msg.obj; reference.writeToCharacteristic(serviceUUID, characteristicUUID, values); } break; } //setCharacteristicNotification case BleConstants.MSG_CONTROL_ID_DESCRIPTOR_NOTIFICATION: { if(data != null) { UUID serviceUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_SERVICE_UUID_KEY); UUID characteristicUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_CHARACTERISTIC_UUID_KEY); UUID descriptorUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_DESCRIPTOR_UUID_KEY); boolean enable = data.getBoolean(BleConstants.BLE_MSG_ENABLE_KEY); reference.updateCharacteristicNotification(serviceUUID, characteristicUUID, descriptorUUID, enable); } break; } //readCharacteristic case BleConstants.MSG_CONTROL_ID_READ_CHARACTERISTIC: { if(data != null) { UUID serviceUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_SERVICE_UUID_KEY); UUID characteristicUUID = (UUID) data.getSerializable(BleConstants.BLE_MSG_CHARACTERISTIC_UUID_KEY); reference.readFromCharacteristic(serviceUUID, characteristicUUID); } break; } } } else { BleLog.i(TAG, "onBleServiceMessage() msg is null"); } } }