         }
         .take(1)
 
-        return ensureValidStateAndCallIfNecessary(
-            for: observable,
-            call: { self.peripheral.discoverServices(serviceUUIDs) }
+        return ensureValidPeripheralStateAndCallIfSucceeded(
+            for: observable,
+            postSubscriptionCall: { self.peripheral.discoverServices(serviceUUIDs) }
         )
     }
 

     */
    public func readValue(for descriptor: Descriptor) -> Observable<Descriptor> {
        let observable = self.monitorValueUpdate(for: descriptor).take(1)
        return ensureValidStateAndCallIfNecessary(
            for: observable,
            call: { self.peripheral.readValue(for: descriptor.descriptor) }
        )
    }


                throw BluetoothError.descriptorsDiscoveryFailed(characteristic, error)
            }

        return ensureValidPeripheralStateAndCallIfSucceeded(
            for: observable,
            postSubscriptionCall: { self.peripheral.discoverDescriptors(for: characteristic.characteristic) }
        )
    }

