mirror of https://github.com/labapart/gattlib
gattlib-py: add get_advertisement_data method
parent
a8a06114e2
commit
d40ac8e743
|
@ -144,6 +144,12 @@ gattlib_register_on_disconnect.argtypes = [c_void_p, py_object, py_object]
|
|||
gattlib_get_rssi_from_mac = gattlib.gattlib_get_rssi_from_mac
|
||||
gattlib_get_rssi_from_mac.argtypes = [c_void_p, c_char_p, POINTER(c_int16)]
|
||||
|
||||
# int gattlib_get_advertisement_data(gatt_connection_t *connection,
|
||||
# gattlib_advertisement_data_t **advertisement_data, size_t *advertisement_data_count,
|
||||
# uint16_t *manufacturer_id, uint8_t **manufacturer_data, size_t *manufacturer_data_size)
|
||||
gattlib_get_advertisement_data = gattlib.gattlib_get_advertisement_data
|
||||
gattlib_get_advertisement_data.argtypes = [c_void_p, POINTER(POINTER(GattlibAdvertisementData)), POINTER(c_size_t), POINTER(c_uint16), POINTER(c_void_p), POINTER(c_size_t)]
|
||||
|
||||
# int gattlib_get_advertisement_data_from_mac(void *adapter, const char *mac_address,
|
||||
# gattlib_advertisement_data_t **advertisement_data, size_t *advertisement_data_length,
|
||||
# uint16_t *manufacturer_id, uint8_t **manufacturer_data, size_t *manufacturer_data_size)
|
||||
|
|
|
@ -108,6 +108,47 @@ class Device:
|
|||
|
||||
logging.debug("Characteristic UUID:0x%x" % characteristic.short_uuid)
|
||||
|
||||
|
||||
def get_advertisement_data(self):
|
||||
_advertisement_data = POINTER(GattlibAdvertisementData)()
|
||||
_advertisement_data_count = c_size_t(0)
|
||||
_manufacturer_id = c_uint16(0)
|
||||
_manufacturer_data = c_void_p(None)
|
||||
_manufacturer_data_len = c_size_t(0)
|
||||
|
||||
ret = gattlib_get_advertisement_data(self._connection,
|
||||
byref(_advertisement_data), byref(_advertisement_data_count),
|
||||
byref(_manufacturer_id),
|
||||
byref(_manufacturer_data), byref(_manufacturer_data_len))
|
||||
handle_return(ret)
|
||||
|
||||
advertisement_data = {}
|
||||
manufacturer_data = None
|
||||
|
||||
for i in range(0, _advertisement_data_count.value):
|
||||
service_data = _advertisement_data[i]
|
||||
uuid = gattlib_uuid_to_int(service_data.uuid)
|
||||
|
||||
pointer_type = POINTER(c_byte * service_data.data_length)
|
||||
c_bytearray = cast(service_data.data, pointer_type)
|
||||
|
||||
data = bytearray(service_data.data_length)
|
||||
for i in range(service_data.data_length):
|
||||
data[i] = c_bytearray.contents[i] & 0xFF
|
||||
|
||||
advertisement_data[uuid] = data
|
||||
|
||||
if _manufacturer_data_len.value > 0:
|
||||
pointer_type = POINTER(c_byte * _manufacturer_data_len.value)
|
||||
c_bytearray = cast(_manufacturer_data, pointer_type)
|
||||
|
||||
manufacturer_data = bytearray(_manufacturer_data_len.value)
|
||||
for i in range(_manufacturer_data_len.value):
|
||||
manufacturer_data[i] = c_bytearray.contents[i] & 0xFF
|
||||
|
||||
return advertisement_data, _manufacturer_id.value, manufacturer_data
|
||||
|
||||
|
||||
@property
|
||||
def services(self):
|
||||
if not hasattr(self, '_services'):
|
||||
|
|
Loading…
Reference in New Issue