Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(710)

Unified Diff: device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm

Issue 1950033002: bluetooth: mac: Initial BluetoothRemoteGattCharacteristicMac implementation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@servicescan_cleanup
Patch Set: Addressing comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
diff --git a/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
new file mode 100644
index 0000000000000000000000000000000000000000..3bc9a78a0236410cc7990e8432d35206d866a765
--- /dev/null
+++ b/device/bluetooth/bluetooth_remote_gatt_characteristic_mac.mm
@@ -0,0 +1,146 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "device/bluetooth/bluetooth_remote_gatt_characteristic_mac.h"
+
+#import <CoreBluetooth/CoreBluetooth.h>
+
+#include "device/bluetooth/bluetooth_adapter_mac.h"
+#include "device/bluetooth/bluetooth_remote_gatt_service_mac.h"
+
+namespace device {
+
+namespace {
+
+static BluetoothGattCharacteristic::Properties ConvertProperties(
+ CBCharacteristicProperties cb_property) {
+ BluetoothGattCharacteristic::Properties result =
+ BluetoothGattCharacteristic::PROPERTY_NONE;
+ if (cb_property & CBCharacteristicPropertyBroadcast) {
+ result |= BluetoothGattCharacteristic::PROPERTY_BROADCAST;
+ }
+ if (cb_property & CBCharacteristicPropertyRead) {
+ result |= BluetoothGattCharacteristic::PROPERTY_READ;
+ }
+ if (cb_property & CBCharacteristicPropertyWriteWithoutResponse) {
+ result |= BluetoothGattCharacteristic::PROPERTY_WRITE_WITHOUT_RESPONSE;
+ }
+ if (cb_property & CBCharacteristicPropertyWrite) {
+ result |= BluetoothGattCharacteristic::PROPERTY_WRITE;
+ }
+ if (cb_property & CBCharacteristicPropertyNotify) {
+ result |= BluetoothGattCharacteristic::PROPERTY_NOTIFY;
+ }
+ if (cb_property & CBCharacteristicPropertyIndicate) {
+ result |= BluetoothGattCharacteristic::PROPERTY_INDICATE;
+ }
+ if (cb_property & CBCharacteristicPropertyAuthenticatedSignedWrites) {
+ result |= BluetoothGattCharacteristic::PROPERTY_AUTHENTICATED_SIGNED_WRITES;
+ }
+ if (cb_property & CBCharacteristicPropertyExtendedProperties) {
+ result |= BluetoothGattCharacteristic::PROPERTY_EXTENDED_PROPERTIES;
+ }
+ if (cb_property & CBCharacteristicPropertyNotifyEncryptionRequired) {
+ // This property is used only in CBMutableCharacteristic
+ // (local characteristic). So this value should never appear for
+ // CBCharacteristic (remote characteristic). Apple is not able to send
+ // this value over BLE since it is not part of the spec.
+ DCHECK(false);
+ result |= BluetoothGattCharacteristic::PROPERTY_NOTIFY;
+ }
+ if (cb_property & CBCharacteristicPropertyIndicateEncryptionRequired) {
+ // This property is used only in CBMutableCharacteristic
+ // (local characteristic). So this value should never appear for
+ // CBCharacteristic (remote characteristic). Apple is not able to send
+ // this value over BLE since it is not part of the spec.
+ DCHECK(false);
+ result |= BluetoothGattCharacteristic::PROPERTY_INDICATE;
+ }
+ return result;
+}
+} // namespace
+
+BluetoothRemoteGattCharacteristicMac::BluetoothRemoteGattCharacteristicMac(
+ BluetoothRemoteGattServiceMac* gatt_service,
+ CBCharacteristic* cb_characteristic)
+ : gatt_service_(gatt_service),
+ cb_characteristic_(cb_characteristic, base::scoped_policy::RETAIN) {
+ uuid_ = BluetoothAdapterMac::BluetoothUUIDWithCBUUID(
+ [cb_characteristic_.get() UUID]);
+ identifier_ =
+ [NSString stringWithFormat:@"%s-%p", uuid_.canonical_value().c_str(),
+ (void*)cb_characteristic_]
+ .UTF8String;
+}
+
+BluetoothRemoteGattCharacteristicMac::~BluetoothRemoteGattCharacteristicMac() {}
+
+std::string BluetoothRemoteGattCharacteristicMac::GetIdentifier() const {
+ return identifier_;
+}
+
+BluetoothUUID BluetoothRemoteGattCharacteristicMac::GetUUID() const {
+ return uuid_;
+}
+
+BluetoothGattCharacteristic::Properties
+BluetoothRemoteGattCharacteristicMac::GetProperties() const {
+ return ConvertProperties(cb_characteristic_.get().properties);
+}
+
+BluetoothGattCharacteristic::Permissions
+BluetoothRemoteGattCharacteristicMac::GetPermissions() const {
+ // Not supported for remote characteristics for CoreBluetooth.
+ NOTIMPLEMENTED();
+ return PERMISSION_NONE;
+}
+
+const std::vector<uint8_t>& BluetoothRemoteGattCharacteristicMac::GetValue()
+ const {
+ return const_cast<std::vector<uint8_t>&>(value_);
ortuno 2016/06/13 20:51:19 Why do you need this const cast?
jlebel 2016/06/15 16:16:37 Done.
+}
+
+BluetoothRemoteGattService* BluetoothRemoteGattCharacteristicMac::GetService()
+ const {
+ return static_cast<BluetoothRemoteGattService*>(gatt_service_);
+}
+
+bool BluetoothRemoteGattCharacteristicMac::IsNotifying() const {
+ NOTIMPLEMENTED();
+ return false;
+}
+
+std::vector<BluetoothRemoteGattDescriptor*>
+BluetoothRemoteGattCharacteristicMac::GetDescriptors() const {
+ NOTIMPLEMENTED();
+ return std::vector<BluetoothRemoteGattDescriptor*>();
+}
+
+BluetoothRemoteGattDescriptor*
+BluetoothRemoteGattCharacteristicMac::GetDescriptor(
+ const std::string& identifier) const {
+ NOTIMPLEMENTED();
+ return nullptr;
+}
+
+void BluetoothRemoteGattCharacteristicMac::StartNotifySession(
+ const NotifySessionCallback& callback,
+ const ErrorCallback& error_callback) {
+ NOTIMPLEMENTED();
+}
+
+void BluetoothRemoteGattCharacteristicMac::ReadRemoteCharacteristic(
+ const ValueCallback& callback,
+ const ErrorCallback& error_callback) {
+ NOTIMPLEMENTED();
+}
+
+void BluetoothRemoteGattCharacteristicMac::WriteRemoteCharacteristic(
+ const std::vector<uint8_t>& new_value,
+ const base::Closure& callback,
+ const ErrorCallback& error_callback) {
+ NOTIMPLEMENTED();
+}
+
+} // namespace device.

Powered by Google App Engine
This is Rietveld 408576698