Home | History | Annotate | Download | only in binder
      1 //
      2 //  Copyright (C) 2015 Google, Inc.
      3 //
      4 //  Licensed under the Apache License, Version 2.0 (the "License");
      5 //  you may not use this file except in compliance with the License.
      6 //  You may obtain a copy of the License at:
      7 //
      8 //  http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 //  Unless required by applicable law or agreed to in writing, software
     11 //  distributed under the License is distributed on an "AS IS" BASIS,
     12 //  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 //  See the License for the specific language governing permissions and
     14 //  limitations under the License.
     15 //
     16 
     17 #pragma once
     18 
     19 #include <cstdint>
     20 #include <string>
     21 #include <vector>
     22 
     23 #include <base/macros.h>
     24 #include <binder/IBinder.h>
     25 #include <binder/IInterface.h>
     26 
     27 #include <bluetooth/gatt_identifier.h>
     28 
     29 namespace ipc {
     30 namespace binder {
     31 
     32 // This class defines the Binder IPC interface for receiving callbacks related
     33 // to Bluetooth GATT server-role operations.
     34 // TODO(armansito): This class was written based on a new design doc proposal.
     35 // We need to add an AIDL for this to the framework code.
     36 //
     37 // NOTE: KEEP THIS FILE UP-TO-DATE with the corresponding AIDL, otherwise this
     38 // won't be compatible with the Android framework.
     39 /* oneway */ class IBluetoothGattServerCallback : public android::IInterface {
     40  public:
     41   DECLARE_META_INTERFACE(BluetoothGattServerCallback);
     42 
     43   static const char kServiceName[];
     44 
     45   // Transaction codes for interface methods.
     46   enum {
     47     ON_SERVER_REGISTERED_TRANSACTION = android::IBinder::FIRST_CALL_TRANSACTION,
     48     ON_SERVICE_ADDED_TRANSACTION,
     49     ON_CHARACTERISTIC_READ_REQUEST_TRANSACTION,
     50     ON_DESCRIPTOR_READ_REQUEST_TRANSACTION,
     51     ON_CHARACTERISTIC_WRITE_REQUEST_TRANSACTION,
     52     ON_DESCRIPTOR_WRITE_REQUEST_TRANSACTION,
     53     ON_EXECUTE_WRITE_REQUEST_TRANSACTION,
     54     ON_NOTIFICATION_SENT_TRANSACTION,
     55   };
     56 
     57   virtual void OnServerRegistered(int status, int server_if) = 0;
     58 
     59   virtual void OnServiceAdded(
     60       int status, const bluetooth::GattIdentifier& service_id) = 0;
     61 
     62   virtual void OnCharacteristicReadRequest(
     63       const std::string& device_address,
     64       int request_id, int offset, bool is_long,
     65       const bluetooth::GattIdentifier& characteristic_id) = 0;
     66 
     67   virtual void OnDescriptorReadRequest(
     68       const std::string& device_address,
     69       int request_id, int offset, bool is_long,
     70       const bluetooth::GattIdentifier& descriptor_id) = 0;
     71 
     72   virtual void OnCharacteristicWriteRequest(
     73       const std::string& device_address,
     74       int request_id, int offset, bool is_prepare_write, bool need_response,
     75       const std::vector<uint8_t>& value,
     76       const bluetooth::GattIdentifier& characteristic_id) = 0;
     77 
     78   virtual void OnDescriptorWriteRequest(
     79       const std::string& device_address,
     80       int request_id, int offset, bool is_prepare_write, bool need_response,
     81       const std::vector<uint8_t>& value,
     82       const bluetooth::GattIdentifier& descriptor_id) = 0;
     83 
     84   virtual void OnExecuteWriteRequest(
     85       const std::string& device_address,
     86       int request_id, bool is_execute) = 0;
     87 
     88   virtual void OnNotificationSent(const std::string& device_address,
     89                                   int status) = 0;
     90 
     91  private:
     92   DISALLOW_COPY_AND_ASSIGN(IBluetoothGattServerCallback);
     93 };
     94 
     95 // The Binder server interface to IBluetoothGattServerCallback. A class that
     96 // implements IBluetoothGattServerCallback must inherit from this class.
     97 class BnBluetoothGattServerCallback
     98     : public android::BnInterface<IBluetoothGattServerCallback> {
     99  public:
    100   BnBluetoothGattServerCallback() = default;
    101   virtual ~BnBluetoothGattServerCallback() = default;
    102 
    103  private:
    104   virtual android::status_t onTransact(
    105       uint32_t code,
    106       const android::Parcel& data,
    107       android::Parcel* reply,
    108       uint32_t flags = 0);
    109 
    110   DISALLOW_COPY_AND_ASSIGN(BnBluetoothGattServerCallback);
    111 };
    112 
    113 // The Binder client interface to IBluetoothGattServerCallback.
    114 class BpBluetoothGattServerCallback
    115     : public android::BpInterface<IBluetoothGattServerCallback> {
    116  public:
    117   explicit BpBluetoothGattServerCallback(
    118       const android::sp<android::IBinder>& impl);
    119   virtual ~BpBluetoothGattServerCallback() = default;
    120 
    121   // IBluetoothGattServerCallback overrides:
    122   void OnServerRegistered(int status, int server_if) override;
    123   void OnServiceAdded(int status,
    124                       const bluetooth::GattIdentifier& service_id) override;
    125   void OnCharacteristicReadRequest(
    126       const std::string& device_address,
    127       int request_id, int offset, bool is_long,
    128       const bluetooth::GattIdentifier& characteristic_id) override;
    129   void OnDescriptorReadRequest(
    130       const std::string& device_address,
    131       int request_id, int offset, bool is_long,
    132       const bluetooth::GattIdentifier& descriptor_id) override;
    133   void OnCharacteristicWriteRequest(
    134       const std::string& device_address,
    135       int request_id, int offset, bool is_prepare_write, bool need_response,
    136       const std::vector<uint8_t>& value,
    137       const bluetooth::GattIdentifier& characteristic_id) override;
    138   void OnDescriptorWriteRequest(
    139       const std::string& device_address,
    140       int request_id, int offset, bool is_prepare_write, bool need_response,
    141       const std::vector<uint8_t>& value,
    142       const bluetooth::GattIdentifier& descriptor_id) override;
    143   void OnExecuteWriteRequest(
    144       const std::string& device_address,
    145       int request_id, bool is_execute) override;
    146   void OnNotificationSent(const std::string& device_address,
    147                           int status) override;
    148 
    149  private:
    150   DISALLOW_COPY_AND_ASSIGN(BpBluetoothGattServerCallback);
    151 };
    152 
    153 }  // namespace binder
    154 }  // namespace ipc
    155