Source code for bt_manager.uuid

from __future__ import unicode_literals
from exceptions import BTUUIDNotSpecifiedException


_BASE_UUID = '00000000-0000-1000-8000-00805F9B34FB'


[docs]class BTUUID: """ This class encapsulates a UUID (universally unique identifier) which is a 128-bit value. It is represented as a hex string of the form `ZZZZYYYY-BBBB-BBBB-BBBB-VVVVVVVVVVVV` although typically UUIDs are referenced only by the 16-bit `YYYY` part since this is generally sufficient to uniquely identify the services/protocols that form part of the bluetooth standard. When creating a UUID as 16-bits only, the `YYYY` nibbles are set accordingly with the remaining nibbles set automatically using the base UUID which is `00000000-0000-1000-8000-00805F9B34FB`. When creating a UUID as 32-bits, the uppermost 8 nibbles shall be set instead. Otherwise a fully qualified 128-bit UUID is assumed to be provided. For ease of use, optionally, a human readable name and description can be provided with the UUID. It is encouraged that this is done as UUIDs are otherwise hard to read. :param str uuid: Optional full 128-bit UUID string of the form `ZZZZYYYY-BBBB-BBBB-BBBB-VVVVVVVVVVVV` :param str uuid16: Optional 16-bit UUID string of the form `YYYY`. Base UUID is used to populate unset bits. :param str uuid32: Optional 32-bit UUID string of the form `ZZZZYYYY`. Base UUID is used to populate unset bits. :param str name: Optional string providing a unique name for the UUID. :param str desc: Optional string providing a description of the UUID. :raises BTUUIDNotSpecifiedException: if neither a uuid, uuid16 nor uuid32 is provided. """ def __init__(self, uuid=None, uuid16=None, uuid32=None, name=None, desc=None): self.name = name self.desc = desc if (uuid): self.uuid = uuid.upper() elif (uuid16): self.uuid = _BASE_UUID[0:4] + uuid16[0:4].upper() + _BASE_UUID[8:] elif (uuid32): self.uuid = uuid32[0:8].upper() + _BASE_UUID[8:] else: raise BTUUIDNotSpecifiedException @property
[docs] def uuid16(self): """ Returns the 16-bit part of the UUID string i.e., given a UUID of the form `ZZZZYYYY-BBBB-BBBB-BBBB-VVVVVVVVVVVV` it shall return `YYYY` """ return self.uuid[4:8]
@property
[docs] def uuid32(self): """ Returns the 32-bit part of the UUID string i.e., given a UUID of the form `ZZZZYYYY-BBBB-BBBB-BBBB-VVVVVVVVVVVV` it shall return `ZZZZYYYY` """ return self.uuid[0:8]
def __repr__(self): return '<uuid:' + self.uuid + ' name:' + \ str(self.name) + ' desc:' + str(self.desc) + '>'
[docs]class BTUUID16(BTUUID): """ Shortened-form UUID allowing only 16-bit UUID to be created. Refer to :py:class:`BTUUID` for details. """ def __init__(self, uuid, name, desc=None): BTUUID.__init__(self, uuid16=uuid, name=name, desc=desc)
[docs]class BTUUID32(BTUUID): """ Shortened-form UUID allowing only 32-bit UUID to be created. Refer to :py:class:`BTUUID` for details. """ def __init__(self, uuid, name, desc=None): BTUUID.__init__(self, uuid32=uuid, name=name, desc=desc)
BASE_UUID = BTUUID(uuid=_BASE_UUID, name='BASE_UUID', desc='Base Universally Unique Identifier') """ :data BASE_UUID: The base UUID which takes the value of `00000000-0000-1000-8000-00805F9B34FB` """