     ///
     /// This sub-procedure is used to read a Characteristic Value from a server when the client
     /// only knows the characteristic UUID and does not know the handle of the characteristic.
+    ///
+    /// ![Image](https://github.com/PureSwift/BluetoothLinux/raw/master/Assets/ReadUsingCharacteristicUUID.png)
     public func readCharacteristics(using uuid: BluetoothUUID,
                                     handleRange: (start: UInt16, end: UInt16) = (.min, .max),
                                     completion: @escaping (GATTClientResponse<[UInt16: Data]>) -> ()) {

     
     If the authenticated Characteristic Value that is written is the wrong size, has an invalid value as defined by the profile, or the signed value does not authenticate the client, then the write shall not succeed and no error shall be gener- ated by the server.
     
     - Note: On BR/EDR, the ATT Bearer is always encrypted, due to the use of Security Mode 4, therefore this sub-procedure shall not be used.
     */
    private func writeSignedCharacteristic(_ characteristic: Characteristic, data: Data) {
        
        // This sub-procedure only writes the first (ATT_MTU – 15) octets of an Attribute Value.
        // This sub-procedure cannot be used to write a long Attribute.

     
     This sub-procedure is used to write a Characteristic Value to a server when the client knows the Characteristic Value Handle but the length of the Characteristic Value is longer than can be sent in a single Write Request Attribute Protocol message.
     
    ![Image](https://github.com/PureSwift/BluetoothLinux/raw/master/Assets/WriteLongCharacteristicValues.png)
     */
    private func writeLongCharacteristicValue(_ characteristic: Characteristic,
                                             data: Data,
