Index: chrome/browser/resources/bluetooth_internals/value_control.js |
diff --git a/chrome/browser/resources/bluetooth_internals/value_control.js b/chrome/browser/resources/bluetooth_internals/value_control.js |
index 2fccbb8ca667035ac62ed33ce6ca3aa50c156b4a..bd5673f3d61f8cb5c62097e1ab354b69a1822bec 100644 |
--- a/chrome/browser/resources/bluetooth_internals/value_control.js |
+++ b/chrome/browser/resources/bluetooth_internals/value_control.js |
@@ -10,6 +10,16 @@ cr.define('value_control', function() { |
/** @const */ var Snackbar = snackbar.Snackbar; |
/** @const */ var SnackbarType = snackbar.SnackbarType; |
+ /** @typedef {{ |
+ * deviceAddress: string, |
+ * serviceId: string, |
+ * characteristicId: string, |
+ * descriptorId: (string|undefined) |
+ * properties: (number|undefined) |
+ * }} |
+ */ |
+ var ValueLoadOptions; |
+ |
/** @enum {string} */ |
var ValueDataType = { |
HEXADECIMAL: 'Hexadecimal', |
@@ -207,8 +217,12 @@ cr.define('value_control', function() { |
this.deviceAddress_ = null; |
/** @private {?string} */ |
this.serviceId_ = null; |
- /** @private {?interfaces.BluetoothDevice.CharacteristicInfo} */ |
- this.characteristicInfo_ = null; |
+ /** @private {?string} */ |
+ this.characteristicId_ = null; |
+ /** @private {?string} */ |
+ this.descriptorId_ = null; |
+ /** @private {number} */ |
+ this.properties_ = Number.MAX_SAFE_INTEGER; |
this.unavailableMessage_ = document.createElement('h3'); |
this.unavailableMessage_.textContent = 'Value cannot be read or written.'; |
@@ -257,17 +271,18 @@ cr.define('value_control', function() { |
/** |
* Sets the settings used by the value control and redraws the control to |
- * match the read/write settings provided in |
- * |characteristicInfo.properties|. |
- * @param {string} deviceAddress |
- * @param {string} serviceId |
- * @param {!interfaces.BluetoothDevice.CharacteristicInfo} |
- * characteristicInfo |
+ * match the read/write settings in |options.properties|. If properties |
+ * are not provided, no restrictions on reading/writing are applied. |
+ * @param {!ValueLoadOptions} options |
*/ |
- load: function(deviceAddress, serviceId, characteristicInfo) { |
- this.deviceAddress_ = deviceAddress; |
- this.serviceId_ = serviceId; |
- this.characteristicInfo_ = characteristicInfo; |
+ load: function(options) { |
+ this.deviceAddress_ = options.deviceAddress; |
+ this.serviceId_ = options.serviceId; |
+ this.characteristicId_ = options.characteristicId; |
+ this.descriptorId_ = options.descriptorId; |
+ |
+ if (options.properties) |
+ this.properties_ = options.properties; |
this.redraw(); |
}, |
@@ -277,10 +292,10 @@ cr.define('value_control', function() { |
* availability of reads and writes and the current cached value. |
*/ |
redraw: function() { |
- this.readBtn_.hidden = (this.characteristicInfo_.properties & |
- interfaces.BluetoothDevice.Property.READ) === 0; |
- this.writeBtn_.hidden = (this.characteristicInfo_.properties & |
- interfaces.BluetoothDevice.Property.WRITE) === 0; |
+ this.readBtn_.hidden = |
+ (this.properties_ & interfaces.BluetoothDevice.Property.READ) === 0; |
+ this.writeBtn_.hidden = |
+ (this.properties_ & interfaces.BluetoothDevice.Property.WRITE) === 0; |
var isAvailable = !this.readBtn_.hidden || !this.writeBtn_.hidden; |
this.unavailableMessage_.hidden = isAvailable; |
@@ -319,15 +334,21 @@ cr.define('value_control', function() { |
/** |
* Called when the read button is pressed. Connects to the device and |
* retrieves the current value of the characteristic in the |service_id| |
- * with id |characteristic_id| |
+ * with id |characteristic_id|. If |descriptor_id| is defined, the |
+ * descriptor value with |descriptor_id| is read instead. |
* @private |
*/ |
readValue_: function() { |
this.readBtn_.disabled = true; |
device_broker.connectToDevice(this.deviceAddress_).then(function(device) { |
+ if (this.descriptorId_) { |
+ return device.readValueForDescriptor( |
+ this.serviceId_, this.characteristicId_, this.descriptorId_); |
+ } |
+ |
return device.readValueForCharacteristic( |
- this.serviceId_, this.characteristicInfo_.id); |
+ this.serviceId_, this.characteristicId_); |
}.bind(this)).then(function(response) { |
this.readBtn_.disabled = false; |
@@ -347,17 +368,23 @@ cr.define('value_control', function() { |
/** |
* Called when the write button is pressed. Connects to the device and |
- * retrieves the current value of the characteristic in the |service_id| |
- * with id |characteristic_id| |
+ * retrieves the current value of the characteristic in the |
+ * |service_id| with id |characteristic_id|. If |descriptor_id| is defined, |
+ * the descriptor value with |descriptor_id| is written instead. |
* @private |
*/ |
writeValue_: function() { |
this.writeBtn_.disabled = true; |
device_broker.connectToDevice(this.deviceAddress_).then(function(device) { |
+ if (this.descriptorId_) { |
+ return device.writeValueForDescriptor( |
+ this.serviceId_, this.characteristicId_, this.descriptorId_, |
+ this.value_.getArray()); |
+ } |
+ |
return device.writeValueForCharacteristic( |
- this.serviceId_, this.characteristicInfo_.id, |
- this.value_.getArray()); |
+ this.serviceId_, this.characteristicId_, this.value_.getArray()); |
}.bind(this)).then(function(response) { |
this.writeBtn_.disabled = false; |